Mysql 如何计算同一表中的子注释

Mysql 如何计算同一表中的子注释,mysql,sql,Mysql,Sql,我有注释表,其中包含以下字段 comment_id parent_id thread_id title body date_comment user_name 我需要检索所有的父注释(在parent_id中有空值),并根据每个父注释计算子注释 我尝试了以下查询 SELECT c1. * , COUNT( c2.

我有注释表,其中包含以下字段

comment_id                      
parent_id                       
thread_id 
title   
body                
date_comment                            
user_name
我需要检索所有的父注释(在parent_id中有空值),并根据每个父注释计算子注释 我尝试了以下查询

SELECT c1. * , COUNT( c2.parent_id ) 
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122
GROUP BY c2.parent_id
ORDER BY c1.date_comment ASC 
但此查询仅统计前三个父注释的子注释。
请分析查询并向我建议解决方案。

我认为问题在于您正在根据所加入类的父id进行分组。这具有您描述的效果,其中没有子项的注释将被忽略。我认为这是可行的:

SELECT c1.*, COUNT( c2.parent_id ) AS childcount
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.thread_id =122
GROUP BY c1.comment_id
ORDER BY c1.date_comment ASC 

您可以在这里将我的解决方案视为SQLFIDLE:

由于缺少示例数据而未经测试的查询,但我希望它能工作

生成一个仅包含按父项id分组的计数的表,并将其与原始表联接:

SELECT c1.*, c2.n
FROM comments c1
LEFT JOIN ( SELECT COUNT(*) as n
            FROM comments
            WHERE parent_id IS NOT NULL
            GROUP BY parent_id ) c2
WHERE c1.parent_id IS NULL
ORDER BY c1.date_comment ASC;

感谢上帝。我找到了解决办法

SELECT c1. * , COUNT( c2.parent_id ) 
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122
GROUP BY c1.comment_id
ORDER BY c1.date_comment ASC

正如@Erik Schierboom所说,我是通过
c2进行分组的。当我用c2替换
GROUP时,父id
是通过c1替换
GROUP。注释id
我的问题解决了

它工作正常,但只有一个问题。它给出1,要么没有子注释,要么只有一个子注释。如果子注释大于1,则给出正确的注释result@RashidFarooq我修复了查询中的问题,并编辑了我的答案。我相信它现在能像你希望的那样工作。