2013-02-13 115 views
1

此查詢生成每個郵政編碼的項目列表。MySQL查詢的麻煩 - WHERE和/或

$ziparrayimplode = implode(",", $ziparray); 
     $listingquery = "SELECT * FROM listings WHERE (CONCAT(title, description) LIKE '%".$searchstring."%') AND auc_cat LIKE '%".$category."%' AND zip IN ($ziparrayimplode) AND all_zip=$allzip ORDER BY list_ts DESC $pages->limit"; 
     $listinghistory = mysql_query($listingquery) or die(mysql_error()); 

如果我用「AND」在all_zip = $ allzip的WHERE語句,那麼所有那些爲all_zip真正的項目會顯示,而不是在$ ziparray的項目。如果我在WHERE語句中使用「OR」,則包含$ ziparray的項目以及$ allzip ...但我的搜索功能根本不起作用。

我是否正確地查詢了這個查詢,或者我應該在WHERE語句中使用「OR」並以搜索的方式查找問題?

+3

嘗試使用'('和')'分組條件?另外,請學習使用PDO,或至少'mysqli','myqsl'已棄用 – J0HN 2013-02-13 15:13:16

回答

2

您可以使用OR/AND運算符優先級來管理它(您的奇怪結果似乎表明您實際上是運算符優先級錯誤使用的「受害者」),或者只是添加括號。

... 
AND (zip IN ($ziparrayimplode) OR all_zip=$allzip) 
ORDER BY... 
+0

謝謝,那正是我所需要的。我使用AND(zip IN($ ziparrayimplode)AND all_zip = $ allzip) – Budove 2013-02-13 16:31:47