2014-02-28 51 views
0

所以我有一個查詢似乎工作正常,直到這條線WHERE s.status = 'pending'它返回的數據'closed'。這個數據部分只有3個選項待處理,關閉和生效。SQL查詢返回錯誤數據,很奇怪

我不知道爲什麼這樣做,我使用相同的查詢,但有status = 'closed'在頁面的不同部分(在這個查詢下,所以變量不應該是衝突),所以爲什麼現在這樣行事?

SELECT s.gameid, s.gameday, s.hometeam AS hid, ht.teamname AS homename, s.awayteam AS aid, at.teamname AS awayname, s.status 
FROM schedule s 
    INNER JOIN teams ht ON s.hometeam = ht.teamid 
    INNER JOIN teams at ON s.awayteam = at.teamid 
WHERE s.status = 'pending' AND s.hometeam = $tid OR s.awayteam = $tid ORDER BY s.gameday ASC LIMIT 5 
+0

混合'AND'和'OR'時,使用'()'來表明什麼應該是真的,什麼是可選的。 – Wrikken

回答

6

包住OR倒是在括號中WHERE子句中的部件。

WHERE s.status = 'pending' AND (s.hometeam = $tid OR s.awayteam = $tid) 
ORDER BY s.gameday ASC LIMIT 5 

你原來的查詢是有效:

WHERE (s.status = 'pending' AND s.hometeam = $tid) OR s.awayteam = $tid 

這顯然是不正確。如果你看看MYSQL's operator precedenceAND優先於OR

+0

謝謝你,完美的工作 – user934902