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我修复了查询中的问题,并编辑了我的答案。我相信它现在能像你希望的那样工作。