1

下面的查询做我想要的。它返回 users 表中的所有结果,然后如果在 details 表中匹配,则返回相关数据

用户

id|username

细节

id|userid|firstname|lastname


$sql = "SELECT u.*, d.*
FROM `users` u
LEFT JOIN `details` d on
u.id = d.userid
ORDER BY $strorder";

但是,当我尝试加入一个我想做同样事情的附加表时——返回用户表的所有结果,如果第三个表中有匹配项,则返回相关数据(此用户的总关注者) --它只返回一条记录。

第三张桌子

跟随

id|followerid|followedid

$sql = "SELECT u.*, d.*, COUNT(f.id)
FROM `users` u
LEFT JOIN `details` d on
u.id = d.userid
LEFT JOIN `follow` f on
u.id = f.followedid
ORDER BY $strorder";

谁能看到我做错了什么?在此先感谢您的任何建议。

非常感谢。

4

2 回答 2

2

尽量避免 * 选择字段,分组数据会更清晰(即使 mysql 非常允许分组)。

当您有一个聚合函数(如 COUNT、SUM)时,其他“非聚合”请求字段应位于 GROUP BY 子句中。

Mysql 不会强迫您对所有字段进行 GROUP BY,但是...我认为“尽可能 ANSI”是一个很好的习惯(当您使用另一个 DBMS 时很有用)

SELECT u.id, u.username, d.firstname, d.lastname, count(*) as numberfollowers
FROM user u
LEFT JOIN details d on u.id = d.userid
LEFT JOIN follow f on u.id = f.followedid
GROUP BY u.id, u.username, d.firstname, d.lastname --or just GROUP BY u.id with Mysql
ORDER BY count(*) desc
于 2012-09-05T14:50:01.690 回答
0

COUNT 是一个聚合函数,当与其他列一起选择时,需要您按选择列表中的其他列对结果进行分组。

您应该使用要从用户和详细信息中选择的列重写查询,并按这些列分组。

于 2012-09-05T14:50:12.603 回答