从具有特定根的 SQL table 中获取最新分支的最有效方法是什么?

What is the most efficient way to get the latest branch out of SQL table with specific root?

这是我的 MySQL 数据库 table:

id | parent | name
----------------------
1  | null   | Root 1
3  | null   | Root 3
6  | 3      | something 1
7  | 6      | something 2
9  | 1      | something 3

我想从 table 中获取最新的分支。现在我只检查最高的 id 并在代码中跟随这些项目到根目录。

在我的例子中,我可以假设最新条目始终是分支的尖端,而不是分支或根的中间。

我遇到的问题是获取特定根目录的最新版本。所以假设我想要 root 3 的最新分支。我该怎么做?

有没有一种方法可以在 SQL 中进行查询,而不必在 PHP 中进行递归循环,直到找到我需要的内容?

改变树在 SQL 中的存储方式目前不是一个选项。 :(

我建议添加一个包含该特定节点完整路径的新列:

id | parent | name          | path 
-----------------------------------
1  | null   | Root 1        | 0|1
3  | null   | Root 3        | 0|3
6  | 3      | something 1   | 0|3|6
7  | 6      | something 2   | 0|3|6|7
9  | 1      | something 3   | 0|1|9

这不会改变您现有的数据,只会扩展它。这种方法在计算时间上比递归或存储过程更简单。当您需要分支 3 的最新版本时,您将执行此操作并直接获取最新节点:

SELECT id FROM table where path like "0|3%" 
ORDER BY path DESC LIMIT 1