当有多棵树时,使用修改后的前序树遍历进行选择

Selecting with modified preorder tree traversal when there are multiple trees

出于优化原因,我已经实施了修改后的预序树遍历 as explained here。我的 table 是这样的:

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

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

文章指出可以非常简单地select所有节点的后代:

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

现在我的问题是 selection 显然要包含其他树的节点。毕竟,我什至没有指定一棵树开始。是否可以使用此模型仅 select 来自一棵指定树的节点?[​​=13=]

不要以 left = 1 开始新树。使用 MAX(right) + 1 作为 left 值。这不会影响其他节点操作,树将被左右范围分隔。