从具有特定根的 SQL 表中获取最新分支的最有效方法是啥?
Posted
技术标签:
【中文标题】从具有特定根的 SQL 表中获取最新分支的最有效方法是啥?【英文标题】:What is the most efficient way to get the latest branch out of SQL table with specific root?从具有特定根的 SQL 表中获取最新分支的最有效方法是什么? 【发布时间】:2016-04-23 13:44:07 【问题描述】:这是我的 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
并在代码中按照项目到根目录。
在我的情况下,我可以假设最新条目始终是分支的尖端,而不是分支或根的中间。
我遇到的问题是获取特定根的最新版本。所以假设我想要根3
的最新分支。我该怎么做?
有没有一种方法可以在 SQL 中查询此内容,而无需在 php 中进行递归循环,直到找到我需要的内容?
目前不能选择更改树在 SQL 中的存储方式。 :(
【问题讨论】:
***.com/questions/12796113/… 这可能会解决您的问题 不是,不是。根据您的建议,更改您的数据模型,或编写存储过程,或将表连接到自身,或使用应用程序级代码来处理递归。 【参考方案1】:我建议添加一个包含指向该特定节点的完整路径的新列:
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
【讨论】:
以上是关于从具有特定根的 SQL 表中获取最新分支的最有效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
SQL查询从数据库中的一个表中获取所有帖子,但来自特定用户的最多5个条目? [复制]