2013-04-11 29 views
1

我有意见表具有以下字段如何从同一个表

comment_id      
parent_id      
thread_id 
title 
body     
date_comment        
user_name 

我需要检索所有的家长意见(有NULL值在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 

但这个查询计算的仅前三个家长的意见子评论。 请分析查询并提出解决方案。

回答

0

感谢上帝。我得到了解决

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.parent_id分组时我换成GROUP BY c2.parent_idGROUP BY c1.comment_id我的问题解决了。

0

我认为问题在于你在加入类的parent_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 

你可以看到我的解决方案作为SQLFiddle这里:http://www.sqlfiddle.com/#!2/a8997/1

+0

它工作正常,但只有一个问题。它给出1或者没有孩子评论或者一个孩子评论。如果孩子的评论超过1,它会给出正确的结果 – 2013-04-11 10:29:10

+0

@RashidFarooq我解决了我的查询中的问题,并编辑了我的答案。我相信它现在可以工作,因为您希望它能够工作。 – 2013-04-12 06:53:19

0

未经测试的查询由于缺乏样本数据,但我希望它的作品。

生成一个表,只有PARENT_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;