2011-09-14 27 views
0

我有我的SQL,但WHERE子句是我有一個問題,因爲用運算符篩選出記錄似乎不過濾記錄,但拿起記錄他們不應該的時間,我需要這個LIKE/REGEXP來獲取記錄,然後通過包含記錄true=陳述來縮小記錄範圍。LIKE和MySQL的記錄過濾沒有變化

WHERE rec.street_name REGEXP '[[:<:]]united[[:>:]]' 
OR rec.city REGEXP '[[:<:]]united[[:>:]]' 
OR rec.state REGEXP '[[:<:]]united[[:>:]]' 
OR rec.country REGEXP '[[:<:]]united[[:>:]]' 
OR rec.street_name LIKE 'united' 
OR rec.city LIKE 'united' 
OR rec.state LIKE 'united' 
OR rec.country LIKE 'united' 
AND rec.ad_type = 1 
AND (rec.num_rooms >= 15 AND rec.num_rooms IS NOT NULL) 
AND rec.visible_listing = 1 

這也不WHERE子句並篩選出記錄:

WHERE rec.street_name REGEXP '[[:<:]]united[[:>:]]' 
OR rec.city REGEXP '[[:<:]]united[[:>:]]' 
OR rec.state REGEXP '[[:<:]]united[[:>:]]' 
OR rec.country REGEXP '[[:<:]]united[[:>:]]' 
OR rec.street_name LIKE 'united' 
OR rec.city LIKE 'united' 
OR rec.state LIKE 'united' 
OR rec.country LIKE 'united' 
AND (rec.ad_type = 1 AND (rec.num_rooms >= 15 AND rec.num_rooms IS NOT NULL) AND rec.visible_listing = 1) 

即使改變rec.num_rooms/rec.ad_type到任意數量仍不會改變任何東西。爲什麼是這樣?

回答

2

在OR附近添加parens

WHERE (rec.street_name REGEXP '[[:<:]]united[[:>:]]' 
OR rec.city REGEXP '[[:<:]]united[[:>:]]' 
OR rec.state REGEXP '[[:<:]]united[[:>:]]' 
OR rec.country REGEXP '[[:<:]]united[[:>:]]' 
OR rec.street_name LIKE 'united' 
OR rec.city LIKE 'united' 
OR rec.state LIKE 'united' 
OR rec.country LIKE 'united') 

AND rec.ad_type = 1 
AND rec.num_rooms >= 15 
AND rec.num_rooms IS NOT NULL 
AND rec.visible_listing = 1