当有多个树时,选择修改后的预订树遍历

时间:2015-01-02 20:41:36

标签: php mysql sql tree

为了优化原因,我实施了修改后的预订树遍历as explained here。我的桌子是这样的:

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

即。表中存在任意数量的树。如果节点的父id为null,那么这自动意味着该节点是其树的基础。

文章指出,人们可以非常简单地选择所有节点的后代:

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

现在我的问题是,选择显然将包括其他树的节点。毕竟,我甚至都没有指定一棵树。是否可以使用此模型从一个指定的树中选择节点?

1 个答案:

答案 0 :(得分:0)

不要使用left = 1启动新树。使用MAX(right)+ 1表示left值。这不会影响其他节点操作,树将由左右范围分隔。