这是我的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,有人可以帮忙吗?
答案 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 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应该评估操作的顺序。