2011-11-05 39 views
1

的子類別我有一個cat表有以下欄目:查詢來獲取子類別,並知道如果孩子類別都有自己

cat_id | name   | parent_id 
1   cat1    1 
2   subcat1    1 
3   subcat1-subcat  2 

此表有類別的數千但那是一般結構。

當用戶選擇一個頂級類別我有一個查詢,以獲取其孩子是這樣的:

SELECT * FROM cat WHERE parent = $id 

我的問題是,我需要知道,如果這些孩子類別具有自己的孩子。

我可以對結果做一個循環,併爲返回的每個類別做一個查詢,但我希望有一個解決方案,我可以只使用一個查詢,也許它會需要一個子查詢?

感謝您的幫助。

+0

您可能會感興趣我的回答(http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree/192462#192462) –

回答

1

你可以使用子查詢來檢查是否有子節點:?什麼是分析一個平坦的桌面變成一棵樹的最有效的/優雅的方式]

select * 
,  case 
     when exists (select * from cat c2 where c2.parent_id = c1.cat_id) then 0 
     else 1 
     end as HasSubcategories 
from cat c1 
1
select *, (select COUNT(*) from cat c2 where c2.parent_id = c1.cat_id) 
from cat c1 

如果存在子類別,count列將不爲零。

+1

+1做一個'exists'子查詢可能會更有效率,讓數據庫知道你只關心是否有孩子,而不是孩子的數量 – Andomar

相關問題