2

カテゴリテーブルは次のようになります。

id -- name -- parent_id
1  -- Men    -- 0
2  -- Women  -- 0
3  -- Shirts -- 1
4  -- Half-sleeve -- 3
5  -- Full-sleeve -- 3

関係表:

Product_id -- Category Id
1          -- 2
2          -- 2
3          -- 4 ....

任意の1つのカテゴリとその直接のサブカテゴリの製品数を簡単に取得できます。しかし、2つ以上のレベルがある場合、物事は厄介になります。

だから私の質問は、男性とそのサブカテゴリのすべての製品の数を取得するにはどうすればよいですか。またはシャツとそのサブカテゴリ?

どんなアイデアでも、ありがとう。

アップデート:

入れ子集合モデルがあることは知っていますが、現在、構造をそれに変更する立場にはありません。

4

2 に答える 2

3

可能であれば、MySQLでの階層データの管理を確認します。

最初は頭を動かすのは難しいですが、このような作業ははるかに簡単になります。

これを実行できない場合は、再帰関数を実行する必要があります。例:

$prods = 0;
function getProdsInCat($cat)
{
    global $prods;

    $prods += mysql_result(mysql_query(SELECT COUNT(`Product_id`) FROM `prod_to_cat` WHERE `Category Id` = '".$cat."'),0);


    $moreCats = mysql_query("SELECT `cat_id` FROM `cats` WHERE `parent_id` = '".$cat."'");
    while($cats = mysql_fetch_assoc($moreCats)
    {
        getProdsInCat($cats['cat_id']);
    }
}
于 2009-10-16T09:02:47.340 に答える
3

カテゴリテーブルに列を追加できると仮定します。

上記の列には、カテゴリへのパスがあります。

id -- name        -- parent_id    path
1  -- Men         -- 0            0/
2  -- Women       -- 0            0/
3  -- Shirts      -- 1            0/1
4  -- Half-sleeve -- 3            0/1/3
5  -- Full-sleeve -- 3            0/1/3

そうすれば、すべてのサブカテゴリを見つけることが1つのクエリになります。

SELECT id as CatId FROM categories WHERE path LIKE '0/1/%';

また、カテゴリ内のすべての製品とその子の数を取得するのも非常に簡単です。

SELECT count(p.id) as Total
FROM products as p 
JOIN categories as c ON p.category_id = c.id
WHERE c.path like '0/1/%';

かなり効率的なクエリ。

この記事はより多くの情報を提供します:SQLのより多くのツリーと階層

于 2009-10-16T09:50:57.670 に答える