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

Mysql में पथ के आधार पर चयन करना

बस आपको ध्यान देने के लिए, ये समाधान स्ट्रिंग तुलनाओं पर आधारित हैं, अनुकूलित नहीं हैं और अनुक्रमणिका का उपयोग नहीं कर सकते हैं। आपको अपनी टेबल को अलग-अलग सामान्य करने पर विचार करना चाहिए। (देखें MySQL में पदानुक्रमित डेटा प्रबंधित करना )

कुछ सवालों के बारे में:

आईडी 9 के सभी बच्चे चुनें:

चूंकि Path कॉलम में आगे और पीछे वाले स्लैश शामिल नहीं हैं, आपको उन्हें पथ से जोड़ना होगा:

SELECT * 
FROM tester
WHERE CONCAT('/', path, '/') LIKE '%/9/%';

9 बच्चों की कुल संख्या का चयन करें, x स्तर गहरा:

हमें पथ में स्लैश की संख्या के आधार पर समूह बनाना होगा, मूल पथ में स्लैश की संख्या घटाकर:

SELECT (LENGTH(c.Path) - LENGTH(REPLACE(c.Path, '/', '')))
    - (LENGTH(p.Path) - LENGTH(REPLACE(p.Path, '/', ''))) AS Level,
    COUNT(*)
FROM tester c
    JOIN tester p ON c.Parent = p.ID
WHERE CONCAT('/', path, '/') LIKE '%/9/%';
GROUP BY 1

सादगी के लिए मैंने उपरोक्त क्वेरी का उपयोग सभी स्तरों को दिखाने के लिए किया है, यदि आप x स्तरों को गहराई तक सीमित करना चाहते हैं, तो WHERE का उपयोग करें नीचे दी गई क्वेरी से विधेय करें।

9 के सापेक्ष स्तर के साथ, 9 के बच्चों की आईडी को नीचे से x स्तर तक चुनें:

हम Path . खोजते हैं माता-पिता के स्तर को ध्यान में रखते हुए, x संख्या के स्तर तक कॉलम:

SELECT c.*
FROM tester c
    JOIN tester p ON c.Parent = p.ID
WHERE CONCAT(
    '/',
    SUBSTRING_INDEX(
        Path, 
        '/', 
        (LENGTH(p.Path) - LENGTH(REPLACE(p.Path, '/', ''))) + 4
    ),
'/') LIKE '%/9/%'

हम जो कदम उठा रहे हैं:

  1. हमें यह पता लगाने की आवश्यकता है कि माता-पिता कितने गहरे हैं, हम पा सकते हैं कि माता-पिता के पथ में स्लैश की गणना करके। (LENGTH(p.Path) - LENGTH(REPLACE(p.Path, '/', '')) )
  2. हमें उस संख्या में 1 जोड़ना होगा, क्योंकि 1 स्लैश वाला पथ 2 स्तर गहरा है।
  3. हम वांछित स्तरों की x संख्या जोड़ते हैं।
  4. पथ स्तंभ को कुल स्तर तक ले जाएं, (SUBSTRING_INDEX समारोह)।
  5. अग्रणी और अनुगामी स्लैश जोड़ें।
  6. 9 के लिए अंतिम स्ट्रिंग खोजें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. केवल एक फ़ील्ड और अन्य सभी फ़ील्ड मान डुप्लिकेट के साथ रिकॉर्ड्स का चयन कैसे करें?

  2. SQLzoo जॉइन ट्यूटोरियल #13

  3. MySQL वर्कबेंच का उपयोग करके MySQL को कैसे रोकें / प्रारंभ करें

  4. पीडीओ इन () ऐरे स्टेटमेंट और एक प्लेसहोल्डर

  5. जांचें कि क्या आईपी सबनेट में है