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

标签 php mysql sql tree

我已经实现了修改后的预序树遍历 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/

相关文章:

php - 如何从 AJAX 调用中检索数组?

PHP5 MySQL5 PDOException “could not find driver”

php - MySQLi 附加更多/更深的结果

php - Mysql - 从文本中选择单词

MYSQL 情况下根本不工作

php - 在 PHP 中将十六进制颜色转换为 RGB 值

php - 如何检查文件是否已删除 google Drive api

mysql - 如何在android中将Mysql DB导入到SQlite中?

c# - 如果失败,使用 LOAD DATA INFILE 时执行的所有插入是否会回滚?

mysql - 在 1 中优化许多 SQL 请求