Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何递归搜索数据库?_Php_Mysql_Recursion - Fatal编程技术网

Php 如何递归搜索数据库?

Php 如何递归搜索数据库?,php,mysql,recursion,Php,Mysql,Recursion,我有一个MySQL表,有3列*ID、Item\u ID和Dependency* 我想知道递归检查依赖项的最佳方法,例如,假设我正在检查项_ID 3的依赖项,它需要项_ID 2,那么我需要检查项_ID 2的依赖项 用PHP实现这一点的最佳方法是什么 ID | Item_ID | Dependency | ---+---------+------------+ 1 | 3 | 2 | ---+---------+------------+ 2 | 2 |

我有一个MySQL表,有3列*ID、Item\u ID和Dependency*

我想知道递归检查依赖项的最佳方法,例如,假设我正在检查项_ID 3的依赖项,它需要项_ID 2,那么我需要检查项_ID 2的依赖项

用PHP实现这一点的最佳方法是什么

ID | Item_ID | Dependency |
---+---------+------------+
1  | 3       | 2          |
---+---------+------------+
2  | 2       | 4          |
---+---------+------------+
3  | 2       | 5          |
---+---------+------------+
伪代码:

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

    else (myQuery(item_ID.dependency())
}
这将沿着列继续,直到您到达一个没有依赖项的项


流程摘要:将第一项传递给函数。检查它是否有依赖项,如果有,使用该依赖项再次调用函数。否则不执行任何操作,函数将返回。当然,您会希望保存查询返回的项目,但我将留给您。您可能希望该语句位于函数的最末尾,这样,当所有操作都完成时,您可以将数据从无依赖项排序到大多数依赖项。

对于纯SQL解决方案:


如果希望遍历表中表示的层次结构,并在一个查询中返回数据,则可以对表使用一系列左外部联接语句来“遍历”关系,这可以达到指定的深度(联接数=树的深度)。然后,您需要决定要从这个大规模连接的表中投影(选择)哪些数据。

是否要继续,直到依赖项为空?你的退出条件是什么?这已经被问了很多次了。只需在stackoverflow甚至google上搜索即可。依赖项是否是一个自引用列(即,同一个表上的ID)r它是否指向不同的表?查看此帖子:我希望它继续运行,直到没有依赖项是的