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

मैसकल रिकर्सिव का चयन करें सभी बच्चे को कई स्तरों के साथ प्राप्त करें

पिछले समाधानों में से किसी ने भी मेरे लिए काम नहीं किया। दोनों केवल तभी काम करते हैं जब माता-पिता एक निश्चित क्रम में डेटाबेस में सहेजे जाते हैं।

मुझे यह स्वीकार करना होगा कि मैं क्वेरी के काम करने के तरीके को पूरी तरह से नहीं समझता लेकिन मेरे लिए काम करने वाला एक तरीका ढूंढ सकता है (कम से कम अन्य उत्तरों से बेहतर)।

वह डेटा जिसके साथ पहली और दूसरी क्वेरी काम नहीं करती हैं:

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           7  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4          Null
   6           ADoc5           5
   7           ADoc6           5

यदि आप इस डेटासेट में पहली और दूसरी क्वेरी का उपयोग करते हैं, तो आईडी 5 के लिए आपको केवल परिणाम '6,7' मिलता है। लेकिन अगर आप मेरी क्वेरी का उपयोग करते हैं तो आपको मिलता है:'6,7,2,3,4' जो अपेक्षित परिणाम है।

मेरा संस्करण:

SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder 
WHERE FIND_IN_SET(idFolderParent, @pv)) AS lv FROM Folder 
JOIN
(SELECT @pv:=5) tmp
) a;

आशा है कि यह किसी की मदद करता है। प्रतिष्ठा की कमी के कारण मैं टिप्पणी नहीं कर सकता और न ही अन्य उत्तरों को कम कर सकता हूं :(



  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. MySQL में लोकेशंस की पूरी सूची

  3. JSON_VALID () - MySQL में मान्य JSON के लिए परीक्षण करें

  4. MySQL में प्रति दिन संचयी कुल उपयोगकर्ता कैसे प्राप्त करें

  5. डेटाबेस पर मीडिया फ़ाइलों को संग्रहीत करने का सबसे अच्छा तरीका क्या है?