2013-02-13 5 views
1

Этот запрос генерирует список элементов для почтового индекса.Проблема с MySQL Query - WHERE AND/OR

$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()); 

Если я использую «И» в WHERE заявлении для all_zip = $ allzip тогда все элементы, которые истинны для all_zip покажет, но не элементы в $ ziparray. Если я использую «OR» в инструкции WHERE, тогда будут включены элементы true для $ ziparray, а также $ allzip ... но моя функция поиска не будет работать вообще.

Я правильно формулирую этот запрос или должен использовать «ИЛИ» в инструкции WHERE и искать проблему в том, как кодируется поиск?

+3

Пробовал использовать '(' и ')' для группировки условий? Также, пожалуйста, научитесь использовать PDO или, по крайней мере, 'mysqli',' myqsl' устарел – J0HN

ответ

2

Вы можете управлять им, играя с приоритетом операторов OR/AND (ваш странный результат, похоже, показывает, что вы на самом деле являетесь «жертвой» неправильного использования приоритета оператора) или просто добавьте круглые скобки.

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

Спасибо, это было то, что мне было нужно. Я использовал AND (zip IN ($ ziparrayimplode) AND all_zip = $ allzip) – Budove