我正在尝试从3个表(消息,user_comment_messages和user_like_messages)创建一个SQL查询,我需要获取每个消息的列表以及喜欢和评论的总数,实际上我正在尝试这样:< / p>
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;
当我执行查询时,我在两列中得到相同的值并且不正确。所以我尝试了一个子查询:
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
这很有效,但在我的开发环境中,我不能使用子选择,只能使用连接。还有另一种方法可以实现吗?
谢谢!
答案 0 :(得分:3)
我认为您可以在distinct
函数中使用count
来计算commentid
和likeid
s的不同出现次数:
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;
答案 1 :(得分:0)
您使用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;