MySQL在PHP搜索查询中返回错误的结果

时间:2014-06-13 17:35:47

标签: php mysql sql

这是我的MySQL查询忽略了类别字段条件,结果还返回了查询中未提及的其他类别的结果,这里是我的mysql查询语句

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的结果而不是1,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

您有4组条件由OR运算符连接,只有第一组具有'category = 1'条件。如果您想从第一类中获取,则需要更多括号。像

where category=1 AND (rest of conditions)

答案 1 :(得分:0)

尝试在WHERE子句中添加括号。 AND 的优先级高于 OR (访问http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html):

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


如果这是在例如

的WHERE子句中
WHERE row1=1 AND row2=2 OR row3=3

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

当row3等于3时,row1可以是任何东西 - 这是你的情况。

答案 2 :(得分:0)

AND OR 布尔操作中有一个优先顺序。

考虑:

false AND ( false OR true )   => false

VS

( false AND false ) OR true   => true

当您指定

时,MySQL 不确定
false AND false OR true

MySQL具有特定的优先顺序,我们保证首先评估AND或OR。

我们可以使用parens 指定 MySQL应该评估操作的顺序。