这是我在
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