[英]How to get recursively folder path from database
我想遞歸地檢索所有路徑。
我的桌子看起來像:
-----------------
| Collection |
-----------------
| id, int |
| name, varchar |
| parent, int |
-----------------
一些數據
----------------------------
| id | name | parent |
----------------------------
| 1 | MyComputer | 0 |
| 2 | Disk C | 1 |
| 3 | Disk D | 1 |
| 4 | Software | 3 |
| 5 | wamp64 | 4 |
| 6 | Programs | 2 |
----------------------------
如果 parent 等於 0,則表示它是根節點。 首先,我需要遞歸地檢索數據。 我嘗試了以下方法:
<?php
$res_arr = array();
$res_arr[] = $root_node;
//$root_node = Array([0] => Array ( [id] => 1 [name] => MyComputer [parent] => 0 ))
foreach($root_node as $value){
$Nodes = $this->GetChildFromCollectionID($value['id']);
//$Nodes = Array( [0] => Array ( [id] => 2 [name] => Disk C [parent] => 1 ) [1] => Array ( [id] => 3 [name] => Disk D [parent] => 1 ))
$res_arr[] = $Nodes;
foreach($Nodes as $Node){
//while($Node['parent'] != 0){
if($Node['parent'] != 0){
$Nodes = $this->GetChildFromCollectionID($Node['id']);
}
$res_arr[] = $Nodes;
}
}
function GetChildFromCollectionID($id)
:
<?php
private function GetChildFromCollectionID($id){
$conn = new mysqli($this->db_host, $this->db_user, $this->db_password, $this->db_name, $this->db_port);
$conn->set_charset("utf8");
if($stmt = $conn->prepare("SELECT id, name, parent FROM collection WHERE parent = ?")) {
$stmt->bind_param("s", $id);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
$res[] = ['id' => $row['id'], 'name' => $row['name'], 'parent' => $row['parent']];
}
$stmt->close();
}
return $res;
}
Output:
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[name] => MyComputer
[parent] => 0
)
)
[1] => Array
(
[0] => Array
(
[id] => 2
[name] => Disk C
[parent] => 1
)
[1] => Array
(
[id] => 3
[name] => Disk D
[parent] => 1
)
)
[2] => Array
(
[0] => Array
(
[id] => 6
[name] => Programs
[parent] => 2
)
)
[3] => Array
(
[0] => Array
(
[id] => 4
[name] => Software
[parent] => 3
)
)
)
如何遞歸檢索所有數據?
如果可能,數據需要格式化為:
[
{
"id": 1,
"name": "MyComputer",
"children": [
{
"id": 2,
"name": "Disk C",
"children": [
{
"id": 6,
"name": "Programs"
}
]
},
{
"id": 3,
"name": "Disk D",
"children": [
{
"id": 4,
"name": "Software",
"children": [
{
"id": 5,
"name": "wamp64"
}
]
}
]
}
]
}
]
也許有更好的數據庫結構。
試試這個 y mysql 查詢
SELECT id, name, parent FROM collection WHERE parent = ? ORDER BY parent DESC"
或這個
SELECT id, name, parent FROM collection WHERE parent = ? ORDER BY parent ASC"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.