2013-04-11 46 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;