2011-03-25 36 views
1

基本上我所擁有的是一個註釋MySQL表。我有一個名爲'parent_id'的列,用於跟蹤評論是否是對其他評論的回覆。幫助MySQL子查詢

我想要做的是統計所有評論。這工作正常,但如果您刪除評論而不是回覆,它會將它們視爲仍處於活動狀態,但完好無損,將被刪除。

這是我的MySQL查詢,目前不工作...任何想法?

SELECT ic.* 
FROM roster_services_items_comments AS ic 
WHERE (SELECT icp.id FROM roster_services_items_comments AS icp 
     WHERE ic.parent_id = '' 
     OR (icp.id = ic.parent_id AND icp.deleted != 0) 
     LIMIT 1) IS NOT NULL 

回答

1

什麼:

SELECT ic.*, COUNT(icp.parent_id) AS replies_count 
FROM roster_services_items_comments AS ic 
LEFT JOIN roster_services_items_comments AS icp ON ic.id = icp.parent_id 
WHERE ic.deleted != 0 
GROUP BY ic.id 
HAVING ic.parent_id IS NULL 

編輯:修正了計數,如果評論沒有任何回覆

+0

這隻會計算根評論 – 2011-03-25 05:30:55

+0

@Yuri不會,它會計算每條評論的回覆數。我不認爲我們在這裏處於遞歸問題。我理解的方式是評論只有1分。沒有回覆評論回覆的概念等等。就像它在SO上的方式一樣。 – 2011-03-25 05:37:15

+0

如果沒有morble sublevels,那麼沒關係,你是對的 – 2011-03-25 05:55:51

0

你或許應該加上這標誌着刪除回覆刪除觸發

的問題是,你需要recursivly檢查可能的父母和父母的父母

你可以創建一個當前註釋遞歸函數,這決定了它刪除了父母或不

0
Select Count(*) 
From roster_services_items_comments As ic 
Where (ic.parent_id = '' And deleted = 0) 
    Or ic.id Not In (
        Select ic1.parent_id 
        From roster_services_items_comments As ic1 
        Where ic1.deleted = 1 
        ) 

能PARENT_ID真的是一個空字符串不算數?如果parent_id是最重要的評論,它會變得更加合理嗎?如果這是真的,我們會有:

Select Count(*) 
From roster_services_items_comments As ic 
Where (ic.parent_id Is Null And deleted = 0) 
    Or ic.id Not In (
        Select ic1.parent_id 
        From roster_services_items_comments As ic1 
        Where ic1.deleted = 1 
        )