2010-02-27 6 views
6

में मैं माता पिता के बच्चे का रिश्ता मैं पुनरावर्ती पूछताछ पर मदद चाहते हैं के साथ एक मेज हैश्रेणीबद्ध डेटा MySql

तालिका संरचना

roleId, roleName,  parentId 
1  Admin   0 
2  Backup Admin 1 
3  Office User 1 0 
4  User 1   3 
5  User 2   3 
6  Office User 2 0 
7  Off User 1  6 

मैं पुनरावर्ती पूछताछ करने के लिए कोशिश कर रहा हूँ, लेकिन मैं ऐसा करने में सक्षम नहीं कर रहा हूँ कृपया मुझे बताएं कि मुझे डेटाबेस जैसे क्वेरी कैसे करना चाहिए

Admin 
    -- Backup Admin 
    Office User 1 
    -- User 1 
    -- User 2 
    Office User 2 
    -- Off User 1 

उत्तर

2

के रूप में बताया ऊपर इस सही मायने में पुनरावर्ती नहीं है, लेकिन अगर आप जानते हैं कि आप कितने कदम गहरी एक अधिकतम के रूप में जाने की जरूरत है, तो आप (शायद पीएचपी का उपयोग क्वेरी उत्पन्न करने के लिए) इन पंक्तियों के साथ कुछ का उपयोग कर सकते हैं:

मैं पहले 0 के बजाय मूल आईडी को न्यूल पर सेट करता हूं, लेकिन यह व्यक्तिगत वरीयता है।

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 
+0

संपादित करें: दूसरा हिस्सा शायद प्रासंगिक नहीं है आपकी समस्या का, यह सिर्फ "पहले" कॉलम में "गहरा" मान असाइन करता है। –

1

MySQL सीधे पुनरावर्ती प्रश्नों का समर्थन नहीं करता है।

आपको एक ऐसा फ़ंक्शन लिखकर अनुकरण करना होगा जो एक सत्र चर में रिकर्सन स्टैक रखता है।

ऐसा करने के तरीके पर अपने ब्लॉग में इस लेख देखें:

2

क्वेरी एक बार मेज, सभी के नाम और आईडी हो रही है, तो जो कुछ भी प्रोग्रामिंग भाषा में पेड़ का निर्माण आप उपयोग कर रहे हैं।