1

次のフィールドを持つコメントテーブルがあります

comment_id                      
parent_id                       
thread_id 
title   
body                
date_comment                            
user_name

すべての親コメント (parent_id に NULL 値を持つ) を取得し、次のクエリを試した各親コメントに対してサブコメントをカウントする必要があります

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 

ただし、このクエリは、最初の 3 つの親コメントのみのサブコメントをカウントします。クエリを分析して、解決策を提案してください。

4

3 に答える 3

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

于 2013-04-11T10:22:44.430 に答える
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;
于 2013-04-11T10:33:19.617 に答える