2011-07-08 23 views
4

好了,所以我有一個表子查詢的單表

Tasks 
-- 
TaskId (unique autoinc primary) 
ChildOf (Contains task ID of parent, or 0 if top tier (no parent)) 

我需要編寫與ChildOf = 0 ...簡單的右側選擇所有記錄的查詢?

好,但還需要有以告訴多少孩子每個任務都有結果返回另一列...

所以結果看起來就會像這樣...

TaskID ... ChildOf ... countChildren 
37 ...... 0 .... 3 
42 ...... 0 .... 0 
99 ...... 0 .... 1 

etc.... 

我知道兩個查詢我需要的是這樣的事情,而是需要將它們結合起來莫名其妙...

Select TaskId as ParentTaskId, ChildOf from Tasks where ChildOf = 0 

Select count(TaskId) from Tasks where ChildOf = ParentTaskId 

注:只有2層..父母和孩子......沒有孫子女!所以希望可以讓它稍微複雜一些。

任何幫助是極大的讚賞。感謝所有幫助!

+0

的MySQL缺乏遞歸功能,現在是ANSI。 MySQL網站曾經有過一篇關於如何處理MySQL中的分層數據的大文章,但甲骨文似乎已經把它取消了:/ –

+0

但是他只需要遞歸功能,如果他需要獲得多個級別的子級。否則,它是一個簡單的子查詢。所以布賴恩,你只需要直接節點的數量,還是要計算整個樹(兒童的孩子)。 –

+0

優秀的問題...我只需要一個級別。父母 - >孩子沒有孫子。 –

回答

1

像這樣的東西應該這樣做:

SELECT TaskId as ParentTaskId, ChildOf , 
(SELECT count(t2.TaskId) 
    FROM Tasks t2 
    WHERE t2.ChildOf = t.TaskId) as CountChildren 
FROM Tasks t 
WHERE t.ChildOf = 0 
+0

謝謝!工作很棒! –

0

試試這個:

SELECT T1.TaskID, T1.ChildOf, count(*) from 
    Tasks as T1 join Tasks as T2 on T1.TaskID = T2.ChildOf 
    WHERE T1.ChildOf = 0 
    GROUP BY (T1.TaskID) 
+0

這是非常接近,但沒有拉起沒有孩子的父母 –

+0

而不是加入使用左加入,讓父母沒有孩子。 –