2014-06-13 1 views
-4

카테고리 필드 조건을 무시 내 MySQL의 쿼리 결과는 여기 쿼리에 언급되지 않은 다른 카테고리에서 결과를 반환 내 MySQL의 쿼리 문입니다MySQL은 PHP의 검색 쿼리에 잘못된 결과를 반환 여기

select *,classifieds.id as id 
from classifieds,classifieds_meta 
where 
    category=1 
    AND meta_key='vehicle_make' 
    and meta_value=2 
    OR meta_key='vehicle_make' 
    and meta_value=3 
    AND (meta_key='vehicle_mileage' and meta_value=9) 
    OR (meta_key='vehicle_mileage' and meta_value=10) 
    OR (meta_key='vehicle_mileage' and meta_value=11) 
    AND classifieds.id=classifieds_meta.classifieds_id 
GROUP BY classifieds.id 

위의 sql 문은 카테고리 1과 6의 결과를 반환하며, 대신 누군가에게 도움을 요청할 수 있습니까?

+0

두 테이블에서 모두를 선택하는'*'을 선택했습니다. 만약 당신이 오직 분류 한 것을 모두 원한다면'classifieds. * '을 사용해야합니다. – James

+9

당신은 당신이하고있는 일을 정확히 알고 mysql을 이해하지 못한다면'and'와'or' 절을 혼합하여 명확하게 incorect 결과로 이끌 것입니다 연산자 우선 순위 규칙 : http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html –

+0

또는이 줄'category = 1 '을'category = 1 AND category! = 6'으로 변경하십시오. – JakeGould

답변

0

WHERE 절에 괄호를 추가하십시오. row3 3 다음 ROW1 아무것도 될 수 같으면이 예

WHERE row1=1 AND row2=2 OR row3=3 

--equal to 
WHERE (row1=1 AND row2=2) OR row3=3 

의 WHERE 절에있는 경우

select *,classifieds.id as id 
from classifieds,classifieds_meta 
where 
    category=1 AND (
     meta_key='vehicle_make' 
     and meta_value=2 
     OR meta_key='vehicle_make' 
     and meta_value=3 
     AND (meta_key='vehicle_mileage' and meta_value=9) 
     OR (meta_key='vehicle_mileage' and meta_value=10) 
     OR (meta_key='vehicle_mileage' and meta_value=11) 
     AND classifieds.id=classifieds_meta.classifieds_id 
    ) 
GROUP BY classifieds.id 


- : 또는 (http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html를 방문)보다 높은 우선 순위를 가지고 이것은 당신의 경우입니다. ANDOR 부울 연산의 우선 순위의 순서가있다

+0

더 자세한 정보를 입력하십시오. – Tulon

0

OR 연산자로 연결된 4 개의 조건 그룹이 있으며 첫 번째 그룹 만 '범주 = 1'조건을 갖습니다. 첫 번째 카테고리에서만 얻으려면 더 많은 괄호가 필요합니다. 마찬가지로

where category=1 AND (rest of conditions) 
0

.

이 생각해 보면

false AND false OR true 

MySQL은 우선 순위의 특정 순서가 지정하는 경우

false AND (false OR true) => false 

(false AND false) OR true => true 

MySQL은 하지 부정, 우리는 여부를 보장 AND 또는 OR이 먼저 평가됩니다.

에 괄호를 사용하여을 지정하면 MySQL에서 연산을 평가해야합니다.