下面的查询完成了我想要的操作。它返回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";但是,当我尝试连接一个附加表时,我想做同样的事情--返回users表的所有结果,如果第三个表中有匹配,则返回相关数据(该用户的总关注者)--它只返回一条记录。
第三表
关注
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";有没有人看到我做错了什么?提前感谢您的任何建议。
非常感谢。
发布于 2012-09-05 22:50:02
尽量避免*选择字段,这样会更清楚地对数据进行分组(即使mysql对分组是非常允许的)。
当您有一个聚合函数(如COUNT、SUM)时,其他“非聚合”请求字段应该在GROUP BY子句中。
Mysql不会强制您按所有字段进行分组,但是...我认为这是一个很好的习惯,“尽可能的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-05 22:50:13
COUNT是一个聚合函数,当与其他列一起选择时,要求您按选择列表中的其他列对结果进行分组。
您应该使用要从users和details中选择的列重写查询,并按这些列分组。
https://stackoverflow.com/questions/12284045
复制相似问题