मैंने पिछली परियोजनाओं में जो किया है, जहां मुझे वही काम करने की आवश्यकता है, मैंने दो नए कॉलम जोड़े।
- i_depth:श्रेणी कितनी गहरी है, इसका अंतर मूल्य
- nvc_breadcrumb:ब्रेडक्रंब प्रकार के प्रारूप में श्रेणी का पूरा पथ
और फिर मैंने तालिका में एक ट्रिगर जोड़ा जिसमें निम्नलिखित करने के लिए श्रेणी की जानकारी है (तीनों अपडेट एक ही ट्रिगर में हैं)...
-- 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
और फिर श्रेणी आईडी पर अपनी उत्पाद तालिका में शामिल हों और "LIKE '%/[CATEGORYID]/%'" करें। ध्यान रखें कि यह MS SQL में किया गया था, लेकिन इसे MySQL संस्करण में अनुवाद करने के लिए काफी आसान होना चाहिए।
यह कट और पेस्ट (टेबल और कॉलम नाम बदलने के बाद) के लिए पर्याप्त रूप से संगत हो सकता है।
स्पष्टीकरण का विस्तार...
t_categories (जैसा कि अभी है)...
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
t_श्रेणियाँ (संशोधन के बाद)...
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 (मेरे द्वारा दी गई स्क्रिप्ट के उपयोग के बाद)
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 (जैसा कि आपके पास अभी है, कोई संशोधन नहीं)...
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
श्रेणियों और उत्पादों में शामिल हों (जहां श्रेणियां सी हैं, उत्पाद पी हैं)
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
अब यह मानते हुए कि उत्पाद तालिका अधिक पूर्ण थी ताकि प्रत्येक श्रेणी में सामान हो और कोई एनयूएलएल न हो, आप मेरे द्वारा प्रदान की गई अंतिम तालिका के अंतिम तीन आइटम प्राप्त करने के लिए "ब्रेडक्रंब LIKE '%/5/%'" कर सकते हैं। ध्यान दें कि इसमें सीधे आइटम और श्रेणी के बच्चे (जैसे सैमसंग टीवी) शामिल हैं। यदि आप केवल विशिष्ट श्रेणी के आइटम चाहते हैं, तो बस "c.cat =5" करें।