2011-10-03 73 views
0

我想根据LIKE通配符筛选搜索结果。如果最终用户输入多个关键字,我也想添加几个OR语句。但我的查询返回的所有结果,而不是筛选结果,下面是代码CAKEPHP条件或语句

 function search() 
     { 
      $queries = explode(" ", $this->data['Project']['query']); 
      $nq = ''; 
      foreach($queries as $q) 
      { 
       $nq[] = array('Project.project_title LIKE'=>"%$q%"); 
      } 

      $final = array("OR"=>$nq); 

      debug($this->Project->find('list',$final)); 
     } 



1 SHOW FULL COLUMNS FROM `projects`  28 28 16 
2 SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= 'latin1_swedish_ci';  1 1 1 
3 SHOW FULL COLUMNS FROM `users`  2 2 8 
4 SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= 'utf8_general_ci';  1 1 1 
5 SHOW FULL COLUMNS FROM `categories`  6 6 11 
6 SHOW FULL COLUMNS FROM `operating_systems`  2 2 7 
7 SHOW FULL COLUMNS FROM `project_operating_systems`  3 3 10 
8 SHOW FULL COLUMNS FROM `projects_categories`  3 3 12 
9 SELECT `Project`.`id`, `Project`.`project_title` FROM `projects` AS `Project` WHERE 1 = 1  4 4 1 
10 SELECT `Category`.`id`, `Category`.`name`, `Category`.`parent_id`, `Category`.`url`, `Category`.`lft`, `Category`.`rght`, `ParentCategory`.`id`, `ParentCategory`.`name`, `ParentCategory`.`parent_id`, `ParentCategory`.`url`, `ParentCategory`.`lft`, `ParentCategory`.`rght` FROM `categories` AS `Category` LEFT JOIN `categories` AS `ParentCategory` ON (`Category`.`parent_id` = `ParentCategory`.`id`) WHERE 1 = 1 
+1

请显示生成的查询。您可以通过将调试级别设置为2来查找它,查询显示在页面的底部。 – JJJ

+0

我添加了查询 – numerical25

回答

1
debug($this->Project->find('list',array('conditions'=>$final))); 
+0

这对调试问题很有帮助,但不是问题的答案。 –

0

当建立一个查询WITN这样一系列or S,始终要小心附上OR条件括号,否则你将否定你的AND条件。

例子:

SELECT * 
FROM users 
WHERE type='teacher' 

只给你的老师。

SELECT * 
FROM users 
WHERE type='teacher' 
AND name like '%Joe%' 

这给出了只有名字中有“Joe”的教师。但:

SELECT * 
FROM users 
WHERE type='teacher' 
AND name like '%Joe%' 
OR name like '%Mary%' 

你可能会期望这给老师的名字是“乔”或“玛丽”......但事实并非如此。它会给你任何名字为“Mary”的用户。若要更正此问题,请使用圆括号:

SELECT * 
FROM users 
WHERE type='teacher' 
AND 
(name like '%Joe%' 
OR name like '%Mary%')