2013-02-13 3 views
1

이 쿼리는 우편 번호 당 항목 목록을 생성합니다. MySQL 쿼리 관련 문제 - 및/또는

$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

답변

2

OR/AND 연산자 우선 순위로 연주를 관리 할 수 ​​있습니다. 이상한 결과는 실제로 연산자 우선 순위가 잘못된 사용의 "희생물"임을 나타내거나 괄호를 추가하는 것입니다.

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

감사합니다. 나는 AND (zip IN ($ ziparrayimplode) AND all_zip = $ allzip을 사용했습니다) – Budove