【问题标题】:How can I recursively search through a database?如何递归搜索数据库?
【发布时间】:2012-03-09 06:13:03
【问题描述】:

我有一个包含 3 列 *ID、Item_ID、Dependency* 的 MySQL 表

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

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

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

【问题讨论】:

  • 你想继续直到依赖为空吗?你的退出条件是什么?
  • 这个问题已经被问过很多次了。只需在 stackoverflow 甚至谷歌上搜索即可。
  • 也是一个自引用列的依赖(即到同一个表上的 ID)r 它是否指向不同的表?
  • 我希望它继续运行,直到没有依赖关系是的

标签: php mysql recursion


【解决方案1】:

伪代码:

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

    else (myQuery(item_ID.dependency())
}

这将继续向下列,直到您到达没有依赖项的项目。

流程总结:将第一项传递给函数。检查它是否具有依赖关系,如果有,则使用该依赖关系再次调用该函数。否则什么都不做,函数将返回。当然你会想要保存查询返回的项目,但我会把它留给你。您可能希望在函数的最后声明该语句,因此当一切都说完后,您的数据将从无依赖关系排序到大多数依赖关系。

【讨论】:

    【解决方案2】:

    对于纯 SQL 解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-18
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多