为了优化原因,我实施了修改后的预订树遍历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 < ?
现在我的问题是,选择显然将包括其他树的节点。毕竟,我甚至都没有指定一棵树。是否可以使用此模型从一个指定的树中选择节点?
答案 0 :(得分:0)
不要使用left
= 1启动新树。使用MAX(right
)+ 1表示left
值。这不会影响其他节点操作,树将由左右范围分隔。