2016-03-11 15 views
1

,我想在一個表中返回任務葉的名單像這樣使用MySQL得到一個任務,葉

ID | ID_TASK_PARENT | TASK_NAME 
--------------------------------------------- 
1 |   NULL | task level 1 
2 |    1 | task child level 2 
3 |    2 | task child level 3 
4 |   NULL | task level 1 
5 |    4 | task child level 2 
6 |    5 | task child level 3 
7 |    5 | task child level 3 

現在,它可能與一個查詢得到來自父親的任務ID的所有葉子任務的ID的?

例子:

ID = 1 --> result ID 3 

ID = 4 --> result ID 6,7 

太謝謝你了!

+0

你知道總會有正好3個級別的拼圖?你只對3級的葉子感興趣嗎? –

+0

不幸的是我不知道以前 – too

回答

0

如果你總是有三層嵌套的,而您只需要在輸出三級,這將工作:

select one.id,three.id 
from leaves one 
join leaves two 
on one.id=two.id_task_parent 
join leaves three 
on two.id = three.id_task_parent; 

這是假設你的表被稱爲「葉子」。它的工作方式是通過做兩個自連接使用ID < - > id_task_parent。但是如果你想低於3報告在兩個級別的葉子,或者水平將無法正常工作,因爲MySQL需要關於每個單獨加入被告知。

+0

不幸的是,我有更多然後3級 – too

0

我affraid沒有好的單查詢做你想要什麼。

我會建議或者使用存儲過程執行此任務,使用臨時表和循環(如果你想,我可以建議這樣的程序),或者修改了一下任務表。

如果有可能增加ID_TASK_ROOT:

ID | ID_TASK_PARENT | ID_TASK_ROOT | TASK_NAME 
------------------------------------------------------------- 
1 |   NULL |   1 | task level 1 
2 |    1 |   1 | task child level 2 
3 |    2 |   1 | task child level 3 
4 |   NULL |   4 | task level 1 
5 |    4 |   4 | task child level 2 
6 |    5 |   4 | task child level 3 
7 |    5 |   4 | task child level 3 

那麼你可以使用查詢:

SELECT  t1.ID 
    FROM tasks t1 
LEFT JOIN tasks t2 
     ON t2.ID_TASK_PARENT = t1.ID 
    WHERE t2.ID IS NULL 
     AND t1.ID_TASK_ROOT = ?; 
相關問題