如何为我的选择语句
获取正确的结果SELECT * FROM ads
WHERE ad_status='1'
AND ad_region='Location One' OR ad_region='Location Two' OR ad_region='Location Three'
AND ad_type='For Rent'
ORDER BY ad_id
DESC LIMIT 10
此声明将返回所有ad_type
(出租,通缉,待售等),但我只想For Rent
。
我认为问题出在ad_region
,因为有OR
。如果没有“OR”(单个位置),结果是正确的。
让我知道。
答案 0 :(得分:5)
您需要将OR
条件放入括号或使用IN
:
SELECT * FROM ads
WHERE
ad_status='1'
AND
ad_region IN ('Location One', 'Location Two', 'Location Three')
AND
ad_type='For Rent'
ORDER BY ad_id
DESC LIMIT 10
答案 1 :(得分:4)
尝试将OR
部分括起来:
SELECT * FROM ads
WHERE ad_status='1'
AND ( ad_region='Location One' OR
ad_region='Location Two' OR
ad_region='Location Three' )
AND ad_type='For Rent'
ORDER BY ad_id
DESC LIMIT 10
AND
的优先级高于显示here的OR
,因此您在问题中所拥有的内容相当于:
SELECT * FROM ads
WHERE (ad_status='1' AND ad_region='Location One')
OR ad_region='Location Two'
OR (ad_region='Location Three' AND ad_type='For Rent')
ORDER BY ad_id
DESC LIMIT 10
它将为您提供广告状态为1的位置1以及位置2的所有内容以及来自位置3的所有租借广告的所有内容。
答案 2 :(得分:2)
你的逻辑并不完全清楚。您需要将逻辑上的从属子句括在括号中,以便让MySQL知道您的实际需求。
你想要吗
ad_status='1'
AND (ad_region='Location One' OR ad_region='Location Two' OR ad_region='Location Three')
AND ad_type='For Rent'
如果你这样做,你可能最好使用IN()
,就像这样:
SELECT * FROM ads
WHERE ad_status='1'
AND ad_region IN ('Location One', 'Location Two', 'Location Three')
AND ad_type='For Rent'
ORDER BY ad_id
DESC LIMIT 10
;
答案 3 :(得分:1)
只需在第3行附近放置括号,即
SELECT * FROM ads
WHERE ad_status='1'
AND (ad_region='Location One' OR ad_region='Location Two' OR ad_region='Location Three')
AND ad_type='For Rent'
ORDER BY ad_id
DESC LIMIT 10
你也可以使用“in”但我试着远离这些,因为它们通常很慢。