2012-05-14 69 views
0

好了,所以我有一個表叫類,看起來像這樣:MYSQL回報父母與子女

id  name  parent_id 
1  camera null 
2  computer null 
3  digital 1 
4  gps  null 
5  laptop 2 

我希望能夠回到電腦 - >筆記本電腦或相機 - 當我查詢>數字ID = 3或5.

任何想法?

回答

0

使用自左連接:

select a.name, b.name as parent_name from categories a left join categories b on a.parent_id = b.id where a.id in (3,5);

以上查詢的有效期爲獲得一個級別的父母。如果你想遍歷整個血統,請參考以下鏈接。他們列出了遍歷樹下來幾個標準方法:

http://jan.kneschke.de/projects/mysql/sp/

2

嘗試Nestedsets這些Structurs。它具有非常好的選擇性能,但是對於寫作而言性能不佳。因此,如果您擁有更多選擇,那麼在表上插入或更新(結構更新)是使用嵌套集合的好選擇。

Breadcrumps與嵌套集合獲得第1類 - >子類別 - >子類別

+0

我所有的CS講座洶涌而至!如果我決定結構將包含更多的兩個層次,將會有適當的解讀和實現。謝謝 – nick

0

,如果它的固定列數的結果集

select p.name, c.name 
mytable c, mytable p 
where c.parent_id = p.id 
and c.id in (3,5) 
0

你正在嘗試使用的是一個反模式。如果您繼續使用它,當您想要選擇子類別的整個樹時,您可能會遇到一些問題。看一下正確模式的答案。

0
select t2.name + "->" + t1.name 
from categories t1 
inner join t2 on t1.id = t2.parent_id 
where t1.id in (3, 5) 
0

如果只有父母的一個級別 - 子引用:

SELECT IF(p.name IS NOT NULL, p.name + " -> " + a.name, a.name) AS name 
FROM categories a 
LEFT JOIN categories p ON a.parent_id = p.id