簡體   English   中英

如何從數據庫中遞歸獲取文件夾路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM