mysql查询组上的错误结果

mysql查询组上的错误结果,mysql,Mysql,我正在为网站创建一个简单的论坛应用程序,这是我的表格模式 这里是mysql查询,用于获取所有类别、主题总数、帖子总数和最后主题日期 SELECT fc.id, fc.name, fc.var_name, fc.description, fc.dnt, COUNT(ft.id) AS total_topics, COUNT(fp.id) AS total_posts, MAX(ft.dnt) AS last_topic_date FROM forum_categories fc LEFT JOI

我正在为网站创建一个简单的论坛应用程序,这是我的表格模式

这里是mysql查询,用于获取所有类别、主题总数、帖子总数和最后主题日期

SELECT fc.id, fc.name, fc.var_name, fc.description, fc.dnt, COUNT(ft.id) AS total_topics, COUNT(fp.id) AS total_posts, MAX(ft.dnt) AS last_topic_date 
FROM forum_categories fc
LEFT JOIN forum_topics ft ON ft.category_id = fc.id
LEFT JOIN forum_posts fp ON fp.topic_id = ft.id
GROUP BY fc.id


正如你所看到的,我总共得到了3个主题,而该类别中只有2个主题可用。请帮我把这个修好。谢谢。

请在此处查看已解决的答案:


当您离开join时,您没有过滤掉空记录,因此您必须澄清计数中的DISTINCT以获得正确的计数()。内部联接通常更快,并且可能是更好的解决方案,除非您不想进行筛选。

感谢您的帮助,请甚至建议我获取“最后一个主题日期”的方法是否正确如果您试图获取最近的日期,请使用MIN()。如果需要最后一个日期,请使用MAX(),因为MAX将返回最早的dateProps,用于提供格式化查询和sql FIDLE+1感谢@JohnRuddell for+1这是每个人应该如何构建问题。。。易于阅读和解决:)
SELECT 
    fc.id, 
    fc.name, 
    fc.var_name, 
    fc.description, 
    fc.dnt, 
    COUNT(DISTINCT ft.id) AS total_topics, 
    COUNT(DISTINCT fp.id) AS total_posts, 
    MAX(ft.dnt) AS last_topic_date -- oldest date for most recent use MIN(ft.dnt) AS last_topic_date 
FROM forum_categories fc
LEFT JOIN forum_topics ft ON ft.category_id = fc.id
LEFT JOIN forum_posts fp ON fp.topic_id = ft.id
GROUP BY fc.id