2015-01-02 13 views
1

出於優化原因,我已經實施了修改的預定義樹遍歷as explained here。我的表是這樣的:當有多棵樹時,使用修改的預定義樹遍歷進行選擇

+----+-----------+------+-------+ 
| id | parent_id | left | right | 
+----+-----------+------+-------+ 
| 1 |  NULL | 1 |  4 | 
| 2 |   1 | 2 |  3 | 
| 3 |  NULL | 1 |  4 | 
| 4 |   3 | 2 |  3 | 
+----+-----------+------+-------+ 

I.e.表中存在任意數量的樹。如果節點的父節點id爲null,那麼這自動意味着該節點是其樹的最底層。

文章指出,人們可以選擇所有節點的後代很乾脆:

SELECT * 
FROM table 
WHERE 
    left > ? 
    AND 
    right < ? 

現在我的問題是,選擇顯然會包括其他樹木節點。畢竟,我甚至沒有指定一棵樹開始。是否可以使用此模型從一個指定的樹中選擇節點?

回答

0

請勿使用left = 1開始新的樹。對於left值,請使用MAX(right)+ 1。這不會影響其他節點的操作,並且樹會由左右範圍分隔。