जैसा कि ऊपर बताया गया है कि यह वास्तव में पुनरावर्ती नहीं है, लेकिन यदि आप जानते हैं कि आपको अधिकतम कितने कदम गहराई तक जाने की आवश्यकता है, तो आप इन पंक्तियों के साथ कुछ का उपयोग कर सकते हैं (शायद क्वेरी उत्पन्न करने के लिए PHP का उपयोग करें):
मैं पहले पैरेंट आईडी को 0 के बजाय NULL पर सेट करूंगा, लेकिन यह व्यक्तिगत प्राथमिकता है।
SELECT * FROM table t1
LEFT JOIN table t2 ON t2.parent_id = t1.role_id
LEFT JOIN table t3 ON t3.parent_id = t2.role_id
WHERE t1.parent_id IS NULL
^^ उस मामले में आपको कितना भी गहरा जाना पड़े।
[अगला बिट सख्ती से प्रासंगिक नहीं है ]
फिर आप इन पंक्तियों के साथ आउटपुट में कुछ हेरफेर कर सकते हैं:
SELECT
(CASE
WHEN (t1.name IS NULL AND t2.name IS NULL) THEN t3.name
WHEN (t1.name IS NULL AND t2.name IS NOT NULL) THEN t2.name
ELSE t1.name END) AS first,
(CASE
WHEN (t1.name IS NOT NULL AND t2.name IS NOT NULL) THEN t2.name
WHEN (t2.name IS NULL AND t3.name IS NOT NULL) THEN NULL
ELSE t3.name END) AS second,
(CASE
WHEN (t1.name IS NOT NULL) THEN t3.name
ELSE NULL END) AS third
FROM