好了,所以我有一個表叫類,看起來像這樣:MYSQL回報父母與子女
id name parent_id
1 camera null
2 computer null
3 digital 1
4 gps null
5 laptop 2
我希望能夠回到電腦 - >筆記本電腦或相機 - 當我查詢>數字ID = 3或5.
任何想法?
好了,所以我有一個表叫類,看起來像這樣:MYSQL回報父母與子女
id name parent_id
1 camera null
2 computer null
3 digital 1
4 gps null
5 laptop 2
我希望能夠回到電腦 - >筆記本電腦或相機 - 當我查詢>數字ID = 3或5.
任何想法?
使用自左連接:
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);
以上查詢的有效期爲獲得一個級別的父母。如果你想遍歷整個血統,請參考以下鏈接。他們列出了遍歷樹下來幾個標準方法:
嘗試Nestedsets這些Structurs。它具有非常好的選擇性能,但是對於寫作而言性能不佳。因此,如果您擁有更多選擇,那麼在表上插入或更新(結構更新)是使用嵌套集合的好選擇。
Breadcrumps與嵌套集合獲得第1類 - >子類別 - >子類別
,如果它的固定列數的結果集
select p.name, c.name
mytable c, mytable p
where c.parent_id = p.id
and c.id in (3,5)
你正在嘗試使用的是一個反模式。如果您繼續使用它,當您想要選擇子類別的整個樹時,您可能會遇到一些問題。看一下正確模式的答案。
select t2.name + "->" + t1.name
from categories t1
inner join t2 on t1.id = t2.parent_id
where t1.id in (3, 5)
如果只有父母的一個級別 - 子引用:
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
我所有的CS講座洶涌而至!如果我決定結構將包含更多的兩個層次,將會有適當的解讀和實現。謝謝 – nick