我的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'值完全错误,我不太明白为什么.
我希望有人可以帮助我吗?
改成
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,因为这样会更有效.