我看過這樣的:MySQL - 是否有可能獲得層次結構中的所有子項?
Select products where the category belongs to any category in the hierarchy
而且這是在談論CTE,這並不在MySQL存在。我有像這樣的結構:
category_id | parent_category_id | name
我想檢索給定category_id的所有子類別ID。這可能沒有抓住一個層次,然後循環這些?
我看過這樣的:MySQL - 是否有可能獲得層次結構中的所有子項?
Select products where the category belongs to any category in the hierarchy
而且這是在談論CTE,這並不在MySQL存在。我有像這樣的結構:
category_id | parent_category_id | name
我想檢索給定category_id的所有子類別ID。這可能沒有抓住一個層次,然後循環這些?
這只是簡化一個鄰接模型表?那麼在不知道最大深度的情況下,在一個查詢中是不可能的。
深思熟慮的食物是Managing Hierarchical Data in MySQL(儘管我不主張使用嵌套集模型來定期更改數據)。
有很多(左)連接,更具體地說:儘可能多的左連接與樹的最大深度一樣,在一個查詢中是可能的。這就是很多人傾向於保存特定類別的「深度」的原因,因此您可以過濾並將同一個表中的連接數量限制爲更加合理的數量。個人而言,爲了定期更改數據:我傾向於在插入/更新上配置觸發器,這將根據ID保存/緩存節點的當前'路徑'(例如:路徑是'12/62/28/345',其中分隔符/
之間的每一步都是正確順序的父節點的主鍵(345的父節點是28,28的父節點是62等)),所以我可以用一個加入像這樣(/用作分隔符):
SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND j.id != o.id -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;
+1爲嵌套集模型 – nico 2010-06-20 20:24:48
感謝您的支持! – 2010-06-22 07:50:57