1

私の問題について助けていただければ幸いです:

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

カテゴリ:

CATID - 名前 - 親 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"; 

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

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

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

4

2 に答える 2

4

カテゴリが無限にネストされていない場合は、一度に 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
于 2009-11-26T15:05:58.313 に答える
-2

Rollup オペレーターを見たいと思います。私はこれがあなたが望むものを手に入れると信じています。

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

ランディ

于 2009-11-26T14:39:16.553 に答える