MySQL JOIN有3个表,COUNT()不起作用

brt*_*tdv 2 mysql sql join

我的MySQL语句有问题.我需要一个查询来计算用户创建的注释数量和主题数量.我的表结构是这样的:

Table 'users'
-------------
user_id
user_name
...

Table 'topics'
--------------
topic_id
topic_user_id
...

Table 'topiccomments'
---------------------
topiccomment_id
topiccomment_user_id
...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够生成此查询:

SELECT 
    u.user_id, 
    u.user_name,
    COUNT(t.topic_user_id) as topic_count,
    COUNT(tc.topiccomment_user_id) as topiccomment_count
FROM 
    users as u
    JOIN topiccomments as tc ON u.user_id = tc.topiccomment_user_id
    JOIN topics as t ON u.user_id = t.topic_user_id
WHERE 
    u.user_id = t.topic_user_id AND
    u.user_id = tc.topiccomment_user_id 
GROUP BY 
    u.user_id
Run Code Online (Sandbox Code Playgroud)

执行此查询,但'topic_count'和'topiccomment_count'值完全错误,我不太明白为什么.

我希望有人可以帮助我吗?

mdm*_*dma 5

改成

COUNT(DISTINCT t.topic_id) as topic_count,
COUNT(DISTINCT tc.topiccomment_id) as topiccomment_count
Run Code Online (Sandbox Code Playgroud)

这将计算与用户ID匹配的不同主题和主题注释的数量.之前,您计算了给定用户的主题和主题注释的交叉积中的行数.

如果它适用于您的情况,我会将其重构为两个查询,一个用于计算主题,一个用于topic_comments,因为这样会更有效.