如何递归搜索数据库?

时间:2012-03-08 22:05:05

标签: php mysql recursion

我有一个包含3列* ID,Item_ID,依赖关系*

的MySQL表

我想知道以递归方式检查依赖项的最佳方法,例如说我正在检查Item_ID 3的依赖项,它需要Item_ID 2,然后我需要检查Item_ID 2的依赖项

使用PHP实现这一目标的最佳方法是什么?

ID | Item_ID | Dependency |
---+---------+------------+
1  | 3       | 2          |
---+---------+------------+
2  | 2       | 4          |
---+---------+------------+
3  | 2       | 5          |
---+---------+------------+

2 个答案:

答案 0 :(得分:0)

伪代码:

func myQuery(item_ID) {
    query (item_ID)
    if (!item_ID.dependency())

    else (myQuery(item_ID.dependency())
}

这将在列中继续,直到您找到没有依赖项的项目。

过程摘要:将第一项传递给函数。检查它是否具有依赖关系,如果有,则使用该依赖关系再次调用该函数。否则什么都不做,函数将返回。当然你会想保存查询返回的项目,但我会留给你。您可能希望在函数的最末端使用该语句,因此当完成所有操作时,您可以从大多数依赖项中依赖顺序排列数据。

答案 1 :(得分:0)

对于纯SQL解决方案:

如果您希望执行表中表示的层次结构的遍历并在一个查询中返回数据,您可以对表使用一系列LEFT OUTER JOIN语句来“走”关系 - 这可以解决指定的深度(JOINS的数量=树的深度)。然后,您需要决定要从这个大规模连接表中投射哪些数据(SELECT)。