繁体   English   中英

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

[英]add WHERE condition to a 3 table LEFT JOIN query…?

我正在努力通过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"

任何和所有建议都欢迎,谢谢!

非常简单:所有WHERE条件都应放在所有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
WHERE foo.category = $var
GROUP BY foo.id
LIMIT 16;

您可能还希望LIMIT子句位于最后。

采用

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 

当您使用左连接或右连接时,请在连接后始终使用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之前使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM