MySQL关联统计查询仅返回1条结果而非预期多条的问题排查
问题原因
你当前的SQL使用了COUNT()这类聚合统计函数,但没有添加GROUP BY子句指定分组维度,数据库会默认将所有符合WHERE groupid = 1条件的关联记录合并为1条聚合结果,这就是你仅返回1条数据的核心原因。
你预期按每个版块分类统计主题数和帖子数,所以需要按分类的唯一维度做分组。
修正后的SQL语句
SELECT forum_category.groupid, forum_category.categoryid, forum_category.categoryname, forum_category.categorydescription, forum_category.category_url, forum_category.accesslevel, COUNT(DISTINCT forum_topic.topicid) AS topics, COUNT(DISTINCT forum_post.postid) AS posts FROM forum_category INNER JOIN forum_topic ON forum_topic.categoryid=forum_category.categoryid INNER JOIN forum_post ON forum_post.topicid=forum_topic.topicid WHERE groupid = 1 -- 新增GROUP BY子句,按分类维度分组统计 GROUP BY forum_category.groupid, forum_category.categoryid, forum_category.categoryname, forum_category.categorydescription, forum_category.category_url, forum_category.accesslevel
补充说明
如果你的场景下需要返回所有groupid=1的分类,哪怕该分类下没有主题、没有帖子也显示统计值为0,可以将INNER JOIN替换为LEFT JOIN,避免无数据的分类被关联过滤掉。
内容的提问来源于stack exchange,提问作者Dorvalla
相关产品推荐
相关产品推荐

