2011-11-08 85 views
0

我正在努力通過php世界,但仍然找到我的腳。我寫了一個查詢,很好地收集我需要從MySQL收集什麼,但我不能讓它與WHERE條件工作。任何幫助將非常感激!將WHERE條件添加到3個表中LEFT JOIN查詢...?

這裏沒有WHERE條件我的工作查詢:

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
    LIMIT 16 GROUP BY foo.id" 

這裏就是我認爲應該努力加入WHERE條件,但沒有工作...

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo 
    WHERE foo.category = $var LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id LIMIT 16 GROUP BY foo.id" 

任何及所有歡迎提出建議,謝謝!

+0

之前的狀況應該是在後'join'語句的結束。查看此參考資料 - > http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php – Rikesh

+0

有沒有想過分開長長的一行以讓讀者能夠看到您的查詢?只是好奇。 –

回答

3

很簡單:所有的WHERE條件應該放在所有的JOIN之後。

+0

感謝您的快速響應!我已經嘗試將它放在LIMIT條件之前,以及LIMIT和GROUP BY之間,並且還在查詢的最後,並且仍然沒有運氣。 – Josiah

+0

等等否,你是對的。就像Yahia一樣,當我測試它時我錯誤地輸入了。非常感謝你! – Josiah

2

您需要將WHERE子句放在所有連接的表之後。因此,

SELECT foo.*, users.name, SUM(bar.amt) Total 
FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
WHERE foo.category = $var 
GROUP BY foo.id 
LIMIT 16; 

您可能還希望LIMIT子句是最後一個。

+0

現在全部排序了,非常感謝! – Josiah

0

使用

SELECT 
foo.*, 
users.name, 
SUM(bar.amt) Total 
FROM foo 
LEFT JOIN bar ON foo.id = bar.foo_id 
LEFT JOIN users ON foo.foo_owner_id = users.id 
WHERE foo.category = $var 
GROUP BY foo.id 
LIMIT 16 
+0

就是這樣,非常感謝! – Josiah

+0

歡迎您:-)請不要忘記做upvote/mark如接受任何有用的答案! – Yahia

0

當您使用左或右,然後加入始終使用where子句後加入。

SELECT foo.*, users.name, SUM(bar.amt) Total 
    FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
    WHERE foo.category = $var 
    GROUP BY foo.id 
    LIMIT 16; 

即使ü希望通過ID順序等使用LIMIT