Php 左连接只返回一条记录
我想把两张桌子连接起来。一个是“用户”,另一个是“评论”。 我想达到的是所有用户的平均和总评分从评论表。 当评审表对所有用户进行评分时,我得到了期望的结果。 但当reviews表为空时,我从users表中只得到一条记录。目前,users表中有3个用户,但查询仅显示一条记录 我想获取所有用户,即使在reviews表中没有用户记录。 这是我正在使用的查询Php 左连接只返回一条记录,php,mysql,count,left-join,average,Php,Mysql,Count,Left Join,Average,我想把两张桌子连接起来。一个是“用户”,另一个是“评论”。 我想达到的是所有用户的平均和总评分从评论表。 当评审表对所有用户进行评分时,我得到了期望的结果。 但当reviews表为空时,我从users表中只得到一条记录。目前,users表中有3个用户,但查询仅显示一条记录 我想获取所有用户,即使在reviews表中没有用户记录。 这是我正在使用的查询 SELECT u.id, u.name, u.photo, COUNT(r.rating) AS totalratings,
SELECT u.id, u.name, u.photo, COUNT(r.rating) AS totalratings,
( SELECT ROUND (AVG(r.rating),0)
FROM reviews r
WHERE r.fk_receiver_id = u.id) AS avg_rating
FROM
users u LEFT JOIN reviews r
ON r.fk_receiver_id = u.id
WHERE u.role=2
GROUP BY r.fk_receiver_id
您按错误的列进行分组;当它为null时(这是因为左连接),分组将不会按照您想要的方式运行。您的查询应该如下所示:
SELECT
u.id,
max(u.name) as name,
max(u.photo) as photo,
COUNT(r.rating) AS totalratings,
ROUND(AVG(r.rating), 0) AS avg_rating
FROM users u
LEFT JOIN reviews r ON r.fk_receiver_id = u.id
WHERE u.role = 2
GROUP BY u.id
请参阅上的运行示例