[英]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
函数来计数commentid
和likeid
的不同出现次数:
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.