【发布时间】:2014-06-13 17:35:46
【问题描述】:
这是我的忽略类别字段条件的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,有人可以帮忙吗?
【问题讨论】:
-
您正在选择
*,它将从两个表中全选。如果您只想从分类广告中获取所有信息,则应使用classifieds.* -
你正在混合使用
and和or子句,这肯定会导致不正确的结果,除非你确切地知道你在做什么并且理解mysql的运算符优先规则:dev.mysql.com/doc/refman/5.0/en/operator-precedence.html跨度> -
或者直接把
category=1这一行改成category = 1 AND category != 6。 -
或者只是将
where category=1 AND之后的所有内容用括号括起来,以便与category=1分开评估。 -
现在我已经改进了这样的代码,但仍然没有运气,这是我的代码 select *,classifieds.id as id from classifications,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 分类.id=classifieds_meta.classifieds_id 按分类分类.id 分组