我有一組數據模擬分類的層次結構。根類別包含一組頂級類別。每個頂級類別都包含一組子類別。每個子類別都有一組組織。一個給定的組織可以出現在多個子類別中。如何在給定節點下的SQL層次結構中選擇所有葉節點?
此層次結構的葉節點是組織。一個組織可能會出現在多個子類別中。
的數據被存儲在三個SQL表:
organizations
organization_id organization_name
1 Org A
2 Org B
3 Org C
4 Org D
5 Org E
6 Org F
categories
category_id parent_id category_name
0 NULL Top Level Category
1 0 First Category
2 0 Second Category
3 1 Sub Category A
4 1 Sub Category B
5 1 Sub Category C
6 2 Sub Category D
organizations_categories -- Maps organizations to sub_categories
organization_id category_id
1 3
2 3
2 6
3 4
4 4
5 4
6 5
6 4
7 6
8 6
我希望能夠在給定的類別或子類別,選擇所有獨特的組織的名單。
我做它現在的方式包括:首先搞清楚已請求的子類別,然後通過每個代碼sub_category循環和進行選擇來獲得映射到該類別的所有組織。每個select的結果都附加到數組中。只要組織出現在多個子類別中,此數組就會包含重複項。
我很樂意與一個查詢,可以有效地選擇給定的層次結構中的類別之一的ID不同的組織的名單,以取代這種雜牌。
我使用PHP和MySQL devloping這個解決方案。
感謝您的時間和建議。
就是這樣。好的解決方案非常感謝你。 – GloryFish 2008-12-18 18:43:13