我已经实现了修改后的预序树遍历 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 |
+----+-----------+------+-------+
即表中存在任意数量的树。如果节点的父 ID 为空,则自动意味着该节点是其树的基础。
文章指出,可以非常简单地选择一个节点的所有后代:
SELECT *
FROM table
WHERE
left > ?
AND
right < ?
现在我的问题是选择显然要包括其他树的节点。毕竟,我什至没有指定一棵树开始。是否可以使用此模型仅从一棵指定的树中选择节点?
最佳答案
不要以 left
= 1 开始新树。对 left
值使用 MAX(right
) + 1。这不会影响其他节点操作,并且树将被左右范围分隔。
关于php - 当有多棵树时,使用修改后的前序树遍历进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748285/