2010-06-18 42 views

回答

3

這只是簡化一個鄰接模型表?那麼在不知道最大深度的情況下,在一個查詢中是不可能的。

深思熟慮的食物是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>; 
+0

+1爲嵌套集模型 – nico 2010-06-20 20:24:48

+0

感謝您的支持! – 2010-06-22 07:50:57

相關問題