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

पेड़ के प्रतिनिधित्व के लिए पदानुक्रम पथ कैसे खोजें

जैसा कि आपने अपने प्रश्न में उल्लेख किया है, आप संग्रहीत प्रक्रिया के साथ जा सकते हैं क्योंकि नेस्टिंग 7 स्तर तक गहरी हो सकती है।

संग्रहीत प्रक्रिया

CREATE PROCEDURE updatePath()
BEGIN
declare cnt, n int;
    select count(*) into n from foo where parent_id is null;
    update foo a, foo b set a.path = b.name where b.parent_id is null and a.parent_id = b.id;
    select count(*) into cnt from foo where path is null;
    while cnt > n do
        update foo a, foo b set a.path = concat(b.path, '/', b.name) where b.path is not null and a.parent_id = b.id;
        select count(*) into cnt from foo where path is null;
    end while;
END//

वास्तविक रिकॉर्ड की जांच करने के लिए हमने पथ कॉलम में शून्य मान वाले सादे रिकॉर्ड को प्रिंट किया है

select * from foo

परिणाम :

| ID |         NAME | PARENT_ID |   PATH |
------------------------------------------
|  1 |        root1 |    (null) | (null) |
|  2 |       child1 |         1 | (null) |
|  3 |    subchild1 |         2 | (null) |
|  4 |       child2 |         1 | (null) |
|  5 |       child3 |         1 | (null) |
|  6 |    subchild2 |         4 | (null) |
|  7 | subsubchild1 |         6 | (null) |

कॉलिंग प्रक्रिया :

call updatepath

प्रक्रिया निष्पादन के बाद परिणाम :

select * from foo

परिणाम :

| ID |         NAME | PARENT_ID |                   PATH |
----------------------------------------------------------
|  1 |        root1 |    (null) |                 (null) |
|  2 |       child1 |         1 |                  root1 |
|  3 |    subchild1 |         2 |           root1/child1 |
|  4 |       child2 |         1 |                  root1 |
|  5 |       child3 |         1 |                  root1 |
|  6 |    subchild2 |         4 |           root1/child2 |
|  7 | subsubchild1 |         6 | root1/child2/subchild2 |

SQLFIDDLE

आशा है कि यह मदद करेगा....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RDS पर डिफ़ॉल्ट समय-क्षेत्र सेटिंग के लिए समायोजन

  2. MySQL - उस तालिका में कैसे सम्मिलित करें जिसमें कई-से-अनेक संबंध हैं

  3. MySQL:क्वेरी से कॉलम नाम या उपनाम प्राप्त करें

  4. कोडइग्निटर कॉन्फिग चारसेट और UTF-8 सपोर्ट

  5. मैं MySQL में ऑटोइनक्रिकमेंट फॉर्मेट को 0001 पर कैसे सेट कर सकता हूं?