Nasıl bütün bir kategori ürünleri ve kendi alt kategoriye (ve alt-alt kategoriye) sayımını alabilirim?

2 Cevap php

Kategori tablo biraz aşağıda gibi görünüyor:

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

İlişki tablosu:

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

Ben herhangi bir kategoride ürün sayısını ve kolaylığı ile kolaylıkla onun hemen alt kategoriler alabilirsiniz. 2'den fazla düzeyleri vardır ama eğer işler dağınık olsun.

Benim soru nasıl Erkekler ürün ve alt kategorilerinin her sayısını alırım olduğunu. Veya Gömlek ve alt kategorileri?

Herhangi bir fikir, teşekkürler.

GÜNCELLEME:

Ben İçiçe Seti Model olduğunu biliyorum ama ben şimdi bu yapıyı değiştirmek için konumda değilim.

2 Cevap

Mümkünse ben kontrol Managing Hierarchical Data in MySQL. Olur

İlk başta başınızın etrafında almak zordur, ama bu gibi görevler çok daha kolay hale getirir.

Bunu yapamıyorsanız, bir özyinelemeli işlev, örneğin yapmak zorunda olacak:

$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']);
    }
}

Eğer kategoriler tabloya fazladan bir sütun ekleyebilirsiniz varsayarsak.

Sütun kategoriye yolu olacağını söyledi.

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

Tüm alt bulmakta bu şekilde bir sorgu olur:

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

Ve bir kategori ve çocuk içindeki tüm ürünlerin sayısını almak için de oldukça kolaydır:

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/%';

Oldukça verimli bir sorgu.

Bu makalede daha fazla bilgi sağlar: More Trees & Hierarchies in SQL