加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – MySQL查询多个LEFT加入问题

发布时间:2020-12-13 21:43:24 所属栏目:PHP教程 来源:网络整理
导读:我试图从以下查询获得所需的结果,但它似乎没有工作… SELECT DISTINCTu.user_name as user_name,u.total_points as total_points,u.user_id as user_id,COUNT(a.id) as user_total_articles_published,COUNT(r.id) as user_total_replies_published,COUNT(v.
我试图从以下查询获得所需的结果,但它似乎没有工作…

SELECT DISTINCT
u.user_name as user_name,u.total_points as total_points,u.user_id as user_id,COUNT(a.id) as user_total_articles_published,COUNT(r.id) as user_total_replies_published,COUNT(v.id) as user_total_votes_done
FROM users as u
LEFT JOIN articles as a ON u.user_id=a.user_id
LEFT JOIN replies as r ON u.user_id=r.user_id
LEFT JOIN votes as v ON u.user_id=v.user_id
GROUP BY u.user_id
ORDER BY u.total_points DESC
LIMIT 10

如果我删除最后2个LEFT jOINS,查询将起作用…其他2的错误是什么?我是否必须使用其他方法才能工作?

谢谢

解决方法

我想通过’不工作’你的意思是查询返回太多记录?这是因为联接的组合.您将返回每篇文章记录的每个回复,因此数字会相乘.您可以通过在COUNT中使用DISTINCT来解决此问题.这样,您可以计算唯一ID,因此您只需计算一次每篇文章:

COUNT(distinct a.id) as user_total_articles_published,COUNT(distinct r.id) as user_total_replies_published,COUNT(distinct v.id) as user_total_votes_done

[编辑]

一个可能更快的解决方案,无需DISTINCT和GROUP BY:

SELECT
  u.user_name as user_name,(SELECT COUNT(a.id) FROM articles a 
   WHERE a.user_id = u.user_id) as user_total_articles_published,(SELECT COUNT(r.id) FROM replies r 
   WHERE r.user_id = u.user_id) as user_total_replies_published,(SELECT COUNT(v.id) FROM votes v 
   WHERE v.user_id = u.user_id) as user_total_votes_done
FROM users as u
ORDER BY u.total_points DESC
LIMIT 10

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读