简体   繁体   English

具有两个联接的SQL查询COUNT

[英]SQL Query COUNT with two Joins

I'm trying to make a SQL Query from 3 tables (messages, user_comment_messages and user_like_messages), I need to get a list of each message with the total number of likes and comments, actually I'm trying with this: 我正在尝试从3个表(消息,user_comment_messages和user_like_messages)进行SQL查询,我需要获取每个消息的列表,其中包括喜欢和评论的总数,实际上,我正在尝试这样做:

SELECT m.id, COUNT(c.id) AS t_comment, COUNT(l.id) AS t_like
FROM messages m
JOIN user_comment_messages c ON c.message_id = m.id
JOIN user_like_messages l ON l.message_id = m.id
GROUP BY m.id;

When I execute the query I get the same value in the two columns and is incorrect. 当我执行查询时,我在两列中得到相同的值,并且是不正确的。 So I've tried with a subquery: 所以我尝试了一个子查询:

SELECT m.id,
(SELECT COUNT(*) FROM user_comment_messages c WHERE m.id = c.message_id) AS t_like,
(SELECT COUNT(*) FROM user_like_messages l WHERE m.id = l.message_id) AS t_comment
FROM messages m
ORDER BY m.id

This works well, but on my development environment I can't use subselects, only joins. 这很好用,但是在我的开发环境中,我不能使用子选择,只能使用联接。 Is there another way to accomplish that? 还有另一种方法可以做到这一点吗?

Thanks! 谢谢!

I think you can use distinct in count function to count distinct occurrences of commentid s and likeid s: 我认为您可以使用distinct in count函数来计数commentidlikeid的不同出现次数:

SELECT m.id, 
       COUNT(DISTINCT c.id) AS t_comment, 
       COUNT(DISTINCT l.id) AS t_like
FROM messages m
LEFT JOIN user_comment_messages c ON c.message_id = m.id
LEFT JOIN user_like_messages l ON l.message_id = m.id
GROUP BY m.id;

You use the LEFT JOIN, by this you can get all message either having like or comment or have no like or comment. 您可以使用LEFT JOIN,这样您可以收到所有具有喜欢或评论或没有喜欢或评论的消息。

SELECT m.id, 
       IFNULL(COUNT(DISTINCT c.id),0) AS t_comment, 
       IFNULL(COUNT(DISTINCT l.id),0) AS t_like
FROM messages m
LEFT JOIN user_comment_messages c ON c.message_id = m.id
JOIN user_like_messages l ON l.message_id = m.id
GROUP BY m.id;

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

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