Understanding Recursion in PHP/mysql
I am trying to create and understand recursion in 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 开发者_Go百科 | 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. Instead, it probably makes more sense (and you'd have a LOT more control over your output) to reorganize the SQL results using PHP.
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
精彩评论