我有以下MySQL记录,因此需要使用下面的MySQL数据在PHP中绘制树结构,此处NULL值表示主要父节点,
+----------------+----------------+ | id | parent_id | +----------------+----------------+ | 1 | NULL| | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 3 | | 6 | 2 | +----------------+----------------+
输出应为格式
1 / \ 2 3 / \ / 4 6 5
请帮帮我。
不工作
答案 0 :(得分:1)
您应该尝试类似
的内容
1
|->2
| |->4
| |->6
|
|->3
|->5

哪个比传统的二进制图更容易实现。并且可以在不出现任何UI问题的情况下水平和垂直扩展。
鉴于数据集较大,上下图需要进行更多计算,以根据每个节点拥有的子节点数来获取每个节点之间的距离。 此外,您可能需要进行其他计算以使其适当居中。
答案 1 :(得分:1)
<?php
function get_path($category_id)
{
// look up the parent of this node
$result = mysql_query("SELECT c1.parent_id,c2.category_name AS parent_name FROM category AS c1
LEFT JOIN category AS c2 ON c1.parent_id=c2.category_id
WHERE c1.category_id='$category_id' ");
$row = mysql_fetch_array($result);
// save the path in this array
$path = array();
//continue if this node is not the root node
if ($row['parent_id']!=NULL)
{
// the last part of the path to node
end($path);
$last_key = key($path);
$key = $last_key==0 ? 0 : $last_key+1;
$path[$key]['category_id'] = $row['parent_id'];
$path[$key]['category_name'] = $row['parent_name'];
$path = array_merge(get_path($row['parent_id']), $path);
}
return $path;
}
?>
要打印路径,只需执行以下操作:
<?php
for ($i=count($path)-1;$i==0;$i--)
{
echo $path[$i]['category_name']. '>';
}
?>
您已经了解了如何从叶子(没有子节点的节点)到根节点找到路径。现在让我们看看如何通过层次结构 - 即从根元素开始,并根据它们的层次关系显示所有节点:
<?php
function display_children($category_id, $level)
{
// retrieve all children
$result = mysql_query("SELECT * FROM category WHERE parent_id='$category_id'");
// display each child
while ($row = mysql_fetch_array($result))
{
// indent and display the title of this child
// if you want to save the hierarchy, replace the following line with your code
echo str_repeat(' ',$level) . $row['category_name'] . "<br/>";
// call this function again to display this child's children
display_children($row['category_id'], $level+1);
}
}
?>
http://www.phpbuilder.com/articles/databases/mysql/handling-hierarchical-data-in-mysql-and-php.html