将WHERE条件添加到3表LEFT JOIN查询...?

时间:2011-11-08 10:23:44

标签: php mysql search where

我正在通过php世界工作,但仍然找到了我的脚。我写了一个很好的查询,可以很好地从mysql中收集我需要的东西,但是我无法让它与WHERE条件一起工作。任何帮助将不胜感激!

这是我没有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"

欢迎提出任何建议,谢谢!!

4 个答案:

答案 0 :(得分:3)

非常简单:所有WHERE条件都应放在所有JOIN之后。

答案 1 :(得分: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子句是最后一个。

答案 2 :(得分: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 

答案 3 :(得分: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之前使用它