出于优化的原因,我已经实现了一个修改过的预排序树遍历如前所述。我的桌子是这样的:
+----+-----------+------+-------+
| id | parent_id | left | right |
+----+-----------+------+-------+
| 1 | NULL | 1 | 4 |
| 2 | 1 | 2 | 3 |
| 3 | NULL | 1 | 4 |
| 4 | 3 | 2 | 3 |
+----+-----------+------+-------+也就是说,表中有任意数量的树。如果节点的父id为空,那么这就自动意味着节点是其树的基础。
本文指出,可以非常简单地选择节点的所有后代:
SELECT *
FROM table
WHERE
left > ?
AND
right < ?现在我的问题是,选择显然将包括其他树的节点。毕竟,我甚至还没有指定一棵树。是否可以使用该模型从一棵指定的树中选择节点?
发布于 2015-01-02 21:19:03
不要用left = 1启动新树,使用MAX(right) +1作为left值。这不会影响其他节点操作,树将被左-右分隔.
https://stackoverflow.com/questions/27748285
复制相似问题