Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

बच्चों के चयन के लिए mySQL क्वेरी

मैंने पिछली परियोजनाओं में जो किया है, जहां मुझे वही काम करने की आवश्यकता है, मैंने दो नए कॉलम जोड़े।

  • 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" करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL का उपयोग करके C# में डेटाटेबल भरना

  2. JSON_KEYS () - MySQL में JSON ऑब्जेक्ट से कुंजियाँ लौटाएँ

  3. केवल एक डेटाबेस पर फ़ाइल प्रदान करें

  4. तालिका से * चुनें जहां तारीख =आज

  5. mysql में अंतिम सम्मिलित ऑटो वेतन वृद्धि आईडी प्राप्त करें