mysql – 使用特定的root从SQL表中获取最新分支的最有效方法是什么?

这是我在
MySQL数据库表中的内容:

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

我想把最新的分支从表中拿出来.现在我只检查最高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
点赞