2013-11-09 75 views
2

我無法選擇多個結果與子/父母關係。這裏是帶有分類樹的表格。該category表表示的關係,而category_name表包含名稱字符串:如何在一個查詢中鏈接SQL選擇結果?

[category]     [category_name] 
id, id_parent    id, name 
-------------    -------------- 
1 NULL     1 'animal' 
2 1      2 'mammal' 
3 2      3 'lion' 
4 2      4 'sea_creature' 
5 4      5 'lion' 

作爲輸入我的名字,必須轉化爲ID的。層次結構正好3層深。例如:animal, mammal, lion, - >1, 2, 3

正如你所看到的lion名稱用於不同的類別。但是,上一級類別是唯一的,子類別的名稱在一個父類別中是唯一的。

我可以做三個獨立的查詢,從animal開始,然後再利用其id隨後查詢id_parent比較:

查詢#1:

SELECT 
    cn.id 
FROM 
    category_name cn 
WHERE 
    cn.name = 'animal' 

(這個查詢在的保存結果可變parent

查詢#2:

SELECT 
    cn.id 
FROM 
    category_name cn 
INNER JOIN category c ON cn.id = c.id 
WHERE 
    cn.name = 'mammal' AND c.id_parent = <parent> 

依此類推。但我相信有更好的方法來做到這一點。

謝謝。

+0

您可以使用「UNION」並確保使用時的性能。 –

回答

2

我想這是你在找什麼:

SELECT c1.id, c2.id, c3.id 
FROM category c1 
JOIN category c2 ON c1.id = c2.id_parent 
JOIN category c3 ON c2.id = c3.id_parent 
JOIN category_name cn1 ON c1.id = cn1.id 
JOIN category_name cn2 ON c2.id = cn2.id 
JOIN category_name cn3 ON c3.id = cn3.id 
WHERE cn1.name = 'animal' AND cn2.name = 'mammal' AND cn3.name = 'lion' 

輸出

| C1ID | C2ID | C3ID | 
|------|------|------| 
| 1 | 2 | 3 | 

小提琴here。作爲一個便箋,我建議你去谷歌搜索「嵌套集」以及「鄰接列表」。

+1

謝謝!這正是我需要的。 –

相關問題