在PHP中構建一個遞歸函數來查詢自引用數據庫表可以像下面這樣:
function getChildren($parent_id, $conn) {
$query = "SELECT * FROM your_table WHERE parent_id = $parent_id";
$result = mysqli_query($conn, $query);
$children = array();
while ($row = mysqli_fetch_assoc($result)) {
$child_id = $row['id'];
$row['children'] = getChildren($child_id, $conn);
$children[] = $row;
}
return $children;
}
// 假設$parent_id是根節點的ID
$parent_id = 0;
// 連接到數據庫
$conn = mysqli_connect("localhost", "username", "password", "database");
// 調用遞歸函數獲取所有子節點
$tree = getChildren($parent_id, $conn);
// 關閉數據庫連接
mysqli_close($conn);
// 輸出樹結構
echo json_encode($tree);
在這個函數中,我們首先查詢具有給定父ID的所有記錄,并逐個迭代這些記錄。對于每個記錄,我們遞歸調用getChildren
函數,以獲取其子節點,并將這些子節點作為記錄的children
屬性添加到結果數組中。最后,我們返回包含根節點及其所有子節點的樹結構。
請注意,這只是一個簡單的示例,實際應用中可能需要根據具體情況進行適當的修改和優化。