2011-10-03 72 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%')