我正在尝试使用PHP和MySQL构建嵌套的父子JSON树。
我的目标是从我的MySQL数据库创建一个JSON树,并使用AngularJS在前端显示一个树。创建树很重要。
我的数据库结构是:
╔═══════╦═══════════════════╦═════════╗ ║ id ║ name ║parent_id║ ╠═══════╬═══════════════════╬═════════╣ ║ 1 ║ Parent ║ 0 ║ ║ 2 ║ Child-1 ║ 1 ║ ║ 3 ║ Child-2 ║ 1 ║ ║ 4 ║ Grand Child-1 ║ 2 ║ ║ 5 ║ Grand Child-2 ║ 2 ║ ║ 6 ║ Grand Child-3 ║ 3 ║ ║ 7 ║ Grand Child-4 ║ 3 ║ ╚═══════╩═══════════════════╩═════════╝
我需要树看起来像:
Parent |--Child-1 | |--Grand Child-1 | |_ Grand Child-2 |--Child-2 | |--Grand Child-3 | |_ Grand Child-4
我做了这样的事情:
function hasChild($id){
$sql = "SELECT count(*) FROM `myTable` WHERE parent_id=".$id;
$stmt = $this->db->prepare($sql);
$stmt->execute($a);
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $row[0] > 0 ? true : false;
}//function hasChild($id)
// create an index on id
$index = array();
foreach($rows as $i =>$row)
{
if (hasChild($i)) {
$index[$row['id']] = $row;
}
}
// build the tree
foreach($index as $id => $indexRow)
{
if ($id === 1) continue;
$parent = $indexRow['parent_id'];
$index[$parent]['children'][] = $indexRow;
}
unset($indexRow);
echo json_encode($index);
但它显然没有给我正确的json树:(
我已经看过嵌套json和数组解决方案了,有些东西不是为了点击我,所以我希望有人可以帮我解决这个问题。我可以使用其他方式,只要我可以拥有相同/相似的功能。
希望我能够很好地描述这种情况,但如果您需要更多数据,请告诉我。
提前谢谢!
答案 0 :(得分:1)
$a
未定义。您也没有在查询中使用任何占位符,所以我认为这会失败。
尝试:
function hasChild($id){
$sql = "SELECT count(*) as da_count FROM `myTable` WHERE parent_id = ?";
$stmt = $this->db->prepare($sql);
$stmt->execute(array($id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row['da_count'] > 0 ? true : false;
}//function hasChild($id)
对准备好的陈述进行更长时间的写作:http://php.net/manual/en/pdo.prepared-statements.php。