Ben aynı şeyi yapmak için gerekli ettik önceki projelerinde ne yaptık, iki yeni sütunlar ekledik.
- i_depth: kategori ne kadar derin int değeri
- nvc_breadcrumb: biçimi bir kırıntı türü kategori tam yol
Ve sonra (her üç güncellemeler aynı tetikleyici olan) aşağıdakileri yapmak için kategori bilgi evleri tabloya bir tetikleyici eklendi ...
-- Reset all branches
UPDATE t_org_branches
SET nvc_breadcrumb = NULL,
i_depth = NULL
-- Update the root branches first
UPDATE t_org_branches
SET nvc_breadcrumb = '/',
i_depth = 0
WHERE guid_branch_parent_id IS NULL
-- Update the child branches on a loop
WHILE EXISTS (SELECT * FROM t_branches WHERE i_depth IS NULL)
UPDATE tobA
SET tobA.i_depth = tobB.i_depth + 1,
tobA.nvc_breadcrumb = tobB.nvc_breadcrumb + Ltrim(tobA.guid_branch_parent_id) + '/'
FROM t_org_branches AS tobA
INNER JOIN t_org_branches AS tobB ON (tobA.guid_branch_parent_id = tobB.guid_branch_id)
WHERE tobB.i_depth >= 0
AND tobB.nvc_breadcrumb IS NOT NULL
AND tobA.i_depth IS NULL
Ve sonra sadece bir kategori kimliği üzerinde ürünler tablo ile katılmak ve bir "LIKE '% / [categoryID] /%'" yaparsınız. Bu MS SQL yapıldığını unutmayın, ama bir MySQL sürümüne çevirmek için yeterli kolay olmalıdır.
Bu sadece (tablo ve sütun isim değişikliği sonrası) bir kesim ve yapıştırma için yeterince uyumlu olabilir.
Açıklama genişletilmesi ...
t_categories (şimdi haliyle) ...
Cat Parent CategoryName
1 NULL MyStore
2 1 Electronics
3 1 Clothing
4 1 Books
5 2 Televisions
6 2 Stereos
7 5 Plasma
8 5 LCD
(değiştikten sonra) t_categories ...
Cat Parent CategoryName Depth Breadcrumb
1 NULL MyStore NULL NULL
2 1 Electronics NULL NULL
3 1 Clothing NULL NULL
4 1 Books NULL NULL
5 2 Televisions NULL NULL
6 2 Stereos NULL NULL
7 5 Plasma NULL NULL
8 5 LCD NULL NULL
t_categories (script kullanımdan sonra verdim)
Cat Parent CategoryName Depth Breadcrumb
1 NULL MyStore 0 /
2 1 Electronics 1 /1/
3 1 Clothing 1 /1/
4 1 Books 1 /1/
5 2 Televisions 2 /1/2/
6 2 Stereos 2 /1/2/
7 5 LCD 3 /1/2/5/
8 7 Samsung 4 /1/2/5/7/
t_products (Eğer şimdi olduğu gibi, hiçbir değişiklik) ...
ID Cat Name
1 8 Samsung LNT5271F
2 7 LCD TV mount, up to 36"
3 7 LCD TV mount, up to 52"
4 5 HDMI Cable, 6ft
Kategoriler ve ürünler Üyelik (kategori C, ürün P)
C.Cat Parent CategoryName Depth Breadcrumb ID p.Cat Name
1 NULL MyStore 0 / NULL NULL NULL
2 1 Electronics 1 /1/ NULL NULL NULL
3 1 Clothing 1 /1/ NULL NULL NULL
4 1 Books 1 /1/ NULL NULL NULL
5 2 Televisions 2 /1/2/ 4 5 HDMI Cable, 6ft
6 2 Stereos 2 /1/2/ NULL NULL NULL
7 5 LCD 3 /1/2/5/ 2 7 LCD TV mount, up to 36"
7 5 LCD 3 /1/2/5/ 3 7 LCD TV mount, up to 52"
8 7 Samsung 4 /1/2/5/7/ 1 8 Samsung LNT5271F
Şimdi her kategori ve hiçbir boş değerlere de şeyler var, böylece ürünlerin tablo daha tam olduğunu varsayarak, ben sağlanan son tablosunun son üç ürün almak için bir "Kırıntı LIKE '% / 5 /%'" yapabilirdi. O (Samsung tv gibi) kategorinin doğrudan öğeleri ve çocuklar var dikkat edin. Sadece bir "c.cat = 5" do SADECE özel kategori öğeleri istiyorum.