カテゴリとそのサブカテゴリに属する​​すべての投稿をカウントする

StackOverflow https://stackoverflow.com/questions/1803905

質問

私の問題に対する助けを本当に感謝します:

次のようにレイアウト(簡略化)された2つのMySQLテーブル、カテゴリ、投稿があります:

カテゴリ

CATID-名前-parent_id

投稿

PID-名前-カテゴリ

私がやりたいのは、サブカテゴリの投稿を含む各カテゴリの投稿の合計数を取得することです。

今、次のようにして、各(トップレベル)カテゴリ(サブカテゴリではない)の投稿の総数を取得しています:

"SELECT c.*, COUNT(p.PID) as postCount 
        FROM categories AS c LEFT JOIN posts AS p 
        ON (c.CATID = p.category) 
        WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC"; 

質問は、関連する各サブカテゴリの合計を含む各カテゴリの合計を取得するにはどうすればよいですか?

既存のシステムを保守しているため、データベースをネストされたセット形式に再構築することはできません。

ご協力ありがとうございます!

役に立ちましたか?

解決

カテゴリが無限にネストされていない場合、一度に1レベルずつ結合できます。最大3レベルのネストの例を次に示します。

SELECT c.name, COUNT(DISTINCT p.PID) as postCount 
FROM categories AS c 
LEFT JOIN categories AS c2
    ON c2.parent = c.catid
LEFT JOIN categories AS c3
    ON c3.parent = c2.catid
LEFT JOIN posts AS p 
    ON c.CATID = p.category
    OR c2.CATID = p.category
    OR c3.CATID = p.category
WHERE c.parent = '0' 
GROUP BY c.CATID, c.name
ORDER BY c.name ASC

他のヒント

ロールアップ演算子を見てみたいと思います。これであなたが望むものが得られると思います。

http://msdn.microsoft.com/ en-us / library / ms189305(SQL.90).aspx

ランディ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top