2014-12-10 11 views
5

में चयन निम्न स्वरूपरिकर्सिव mysql

TaskID ParentTaskID 
1  1 
2  1 
3  2 
4  2 
5  2 
10  10 
11  11 
12  11 
13  0 
14  14 

मैं नीचे के रूप में परिणाम चाहते हैं, अगर taskid 1

TaskID 
1 
2 
3 
4 
5 

है साथ मैं एक मेज है, तो अपने 2 तब

Taskid 
2 
3 
4 
5 

यदि इसके 10 10 1

का अर्थ है मैं पंक्तियों इतने पर ........

इस बेला http://sqlfiddle.com/#!2/9db0c3/6

+0

चयन t2.id, t1.id = t2.parenttaskid पर tbl_taskmaster t2 में शामिल होने t1 इनर tbl_taskmaster से t2.parenttaskid जहां t1.parenttaskid = 1 – Haris

+0

क्या अपनी टिप्पणी में है के साथ अपने प्रश्न अद्यतन। –

+0

क्या आपको एक ऐसे उत्तर की आवश्यकता है जो एक एसक्यूएल स्टेटमेंट है, या एक संग्रहीत प्रक्रिया आपकी आवश्यकताओं को पूरा करेगी? क्या किसी भी बार रिकर्सन के स्तर की अधिकतम संख्या के बारे में एक सुरक्षित धारणा है? – RobP

उत्तर

1

MySQL नहीं है का उपयोग करें parenttaskid = 1 ऊपर चयन & में parenttaskid होने पंक्तियों के साथ होने के साथ होने taskid = 1 पंक्तियों का चयन करना चाहते हैं समर्थन रिकर्सिव चयन करें।

लेकिन, नीचे दिए गए क्वेरी चाल है कि आप के लिए

SELECT t.TaskID 
FROM task AS t 
INNER JOIN (
    SELECT DISTINCT a.TaskID 
    FROM task AS a 
    INNER JOIN (
     SELECT TaskID 
     FROM task 
     WHERE TaskID = 11 OR ParentTaskID = 11 
     UNION ALL 
     SELECT ParentTaskID 
     FROM task 
     WHERE TaskID = 11 OR ParentTaskID = 11 
    ) AS s ON s.TaskID = a.ParentTaskID 
) AS s ON s.TaskID = t.TaskID 
+0

है, मुझे आपकी क्वेरी की कोशिश की गई थी, यह सही परिणाम नहीं प्राप्त कर रहा है http://sqlfiddle.com/#!2/9db0c3/6 – Haris

+0

मैंने अभी जवाब अपडेट किया है। मुझे लगता है कि आपके प्रश्न में आपके पास तर्कसंगत मुद्दा है। यदि टास्किड = 2 तो आउटपुट 1 2 3 4 5 होना चाहिए task_id = 2 का पैर 1 है इसलिए 1 को शामिल किया जाना चाहिए http://sqlfiddle.com/#!2/9db0c3/15 – Jaylen

+0

यदि taskid = 2, तो इसका मतलब है कि मैं टास्किड = 2 वाली पंक्तियों और parenttaskid = 2 वाली पंक्तियों का चयन करना चाहता हूं और यदि किसी बच्चे के ऊपर उपरोक्त परिणाम से parenttaskid है। मुझे आशा है कि आपको तर्क मिलेगा ... – Haris

1

देख रहे माइक जैसा कि पहले ही कहा, MySQL पुनरावर्ती का चयन करें या पुनरावर्ती कार्यों का समर्थन नहीं करता क्या करना चाहिए।

यदि आपके पास अपने कार्य संगतता (जैसे 5) पर अधिकतम तार्किक सीमा है तो आप हार्ड कोड किए गए स्वयं जुड़ सकते हैं।

SELECT 
t1.taskid as taskid1, 
t2.taskid as taskid2, 
t3.taskid as taskid3, 
t4.taskid as taskid4, 
t5.taskid as taskid5 
FROM task t1 
LEFT JOIN task t2 ON t2.parenttaskid = t1.taskid 
LEFT JOIN task t3 ON t3.parenttaskid = t2.taskid 
LEFT JOIN task t4 ON t4.parenttaskid = t3.taskid 
LEFT JOIN task t5 ON t5.parenttaskid = t4.taskid 

कौन इस परिणाम का उत्पादन करेगा: http://sqlfiddle.com/#!2/c9f80/1/0

तरह से आप अपने इनपुट डेटा में कुछ स्वयं संदर्भित कार्यों के लिए जो प्रत्यावर्तन के साथ एक अनन्तता पाश उत्पादन होता है के द्वारा।

संबंधित मुद्दे