我的数据库中有以下数据:
id nameOfPerson parent
3 John NULL
4 Michel 3
5 Husam 4
6 Khalaf 5
7 Mark 5
----------------------------
我想在列表中这样显示它
厕所
米歇尔
胡萨姆
哈拉夫
作记号
但在我的代码里他只是
厕所
米歇尔
我想如何显示所有数据根据家长喜欢上面的列表?
这是我的职能有什么错?
public function familyTree(){
$query = "SELECT id, nameOfPerson, parent FROM person WHERE parent is null";
$statment = $this->db->prepare($query);
$statment->execute();
echo '<ul id ="family">';
while($family = $statment->fetch(PDO::FETCH_OBJ)){
echo '<li>'. $family->nameOfPerson;
$query1 = "SELECT id, nameOfPerson, parent FROM person WHERE parent = :id";
$statment1 = $this->db->prepare($query1);
$statment1->bindValue('id', $family->id);
$statment1->execute();
if($statment1->rowCount() > 0){
echo '<ul>';
while($family2 = $statment1->fetch(PDO::FETCH_OBJ)){
echo '<li>' . $family2->nameOfPerson . '</li>';
}
echo '</ul>';
}
echo '</li>';
}
echo '</ul>';
}
1条答案
按热度按时间5q4ezhmt1#
假设
每个孩子只有
1
起源。代码
首先,我从db表中检索所有数据,因为为每个父级单独检索数据会增加db调用并影响响应时间,因此效率不高。
构建父级和子级的关联数组,其中每个父级都有两个
each child
-nameOfPerson
以及id
.以递归的方式迭代这个数组,并继续为每个子级构建列表,最终返回它们。
有关表行,请参阅SQLFiddle。
输出