[英]Understanding Recursion in PHP/mysql
I am trying to create and understand recursion in php/mysql 我正在尝试创建和理解php / mysql中的递归
my database looks something like the following 我的数据库如下所示
id | woid | parent | name
-------------------------------
1 | 1111 | 0 | pdf
2 | 1111 | 0 | docs
3 | 2222 | 0 | pdf
4 | 2222 | 0 | docs
5 | 3333 | 0 | pdf
6 | 1111 | 2 | folder1
7 | 2222 | 4 | folder3
8 | 3333 | 5 | folder
I would like to have it where if there are tons and tons of parent folders, it will be able to go through all of them. 我想在有大量父文件夹的地方使用它,它将能够遍历所有文件夹。 how do i go about doing this.
我该怎么做。
In order to get SQL to return a more tree-like structure would actually be pretty difficult. 为了使SQL返回更类似树的结构,实际上将非常困难。 Instead, it probably makes more sense (and you'd have a LOT more control over your output) to reorganize the SQL results using PHP.
相反,使用PHP重新组织SQL结果可能更有意义(而且您将对输出有更多控制)。
SELECT id, woid, parent, name FROM files ORDER by parent ASC;
This will get us everything. 这将为我们提供一切。 Then we iterate through the resultset, storing the result into an array keyed by parent.
然后,我们遍历结果集,将结果存储到父级键控的数组中。
$folders = array();
foreach ($resultset AS $row) {
$row['id'] = (int)$row['id'];
$row['parent'] = (int)$row['parent'];
if (!$folders[$row['parent']]) $folders[$row['parent']] = array();
$folders[$row['parent']][] = $row;
}
Then we can output this array recursively: 然后我们可以递归输出此数组:
function buildTree($inputArray, $parent = 0) {
$return = array();
foreach ($inputArray[$parent] AS $key => $row) {
if ($inputArray[$row['id']]) {
$row['children'] = buildTree($inputArray, $row['id']);
}
$return[] = $row;
}
return $return;
}
$myStuff = buildTree($folders);
If you are looking for an efficient way to find all parent nodes (or the super parent node), given a node deep down in your hierarchy, you are entering the realm of graph theory, which comes with many own challenges, especially when the structure of your graph is represented in a single table such as in your own case. 如果您正在寻找一种有效的方法来查找所有父节点(或超级父节点),给定层次结构中的某个节点,那么您正在进入图论的领域,这会带来很多挑战,尤其是当结构图的表示在单个表中,例如您自己的情况。
Check out this resource for a good overview: http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html 查看此资源以获得良好的概述: http : //www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.