Php mysql中的父子关系
我有一个如下表,需要显示为父和子格式Php mysql中的父子关系,php,mysql,hierarchical-data,Php,Mysql,Hierarchical Data,我有一个如下表,需要显示为父和子格式 -------------------------------------------------------- id role_name role_id parent_id -------------------------------------------------------- 1 NSM 1 0 2 MR 5 2 3
--------------------------------------------------------
id role_name role_id parent_id
--------------------------------------------------------
1 NSM 1 0
2 MR 5 2
3 ASM 4 3
4 ZSM 3 4
5 RSM 2 1
---------------------------------------------------------
结果如下所示
NSM
---RSM
-----ZSM
-----NSM
-----MR
NSM->ROOT
RSM->FIRST CHILD
ZSM->SECOND CHILD
NSM->THIRD CHILD
MR->LEAF
SQL结果总是平坦的-您将无法在查询中返回该数据的层次结构视图
相反,我建议使用您正在使用的任何客户端组件来显示(它是树吗?具体是什么?)它知道如何遍历平面列表并从中构建层次结构。如果您希望在控制台中打印这样的视图(为什么要这样做?),您可以这样做:
$data = array();
$query = mysql_query("SELECT * FROM table ORDER BY parent_id");
while($array = mysql_fetch_assoc($query))
{
$data[$array['parent_id']][] = $array;
}
function output_hierarchy($id, $prepend)
{
$current = $data[$id];
foreach($current as $item)
{
print $prepend . " " . $item['role_name'];
if(count($data[$item['id']]) > 0)
{
output_hierarchy($item['id'], $prepend . "--");
}
}
}
output_hierarchy(0, '');
如果你想在你的网站上使用它,你可以很容易地调整它。代码应该是自解释的。//获取所有角色
// Fetch all the roles
$result = mysql_query("select * from roles");
$roles = array();
while( $role = mysql_fetch_assoc($result) ) {
$roles[] = $role;
}
// Function that builds a tree
function build_tree($roles, $parent_id=0) {
$tree = array();
foreach ($roles as $role) {
if ($role['parent_id'] == $parent_id) {
$tree[] = array(
'role' => $role,
'children' => build_tree($roles, $role['parent_id'])
);
}
}
return $tree;
}
// Function that walks and outputs the tree
function print_tree($tree) {
if (count($tree) > 0) {
print("<ul>");
foreach($node in $tree) {
print("<li>");
htmlspecialchars($node['role']['role_name']);
print_tree($node['children']);
print("</li>");
}
print("</ul>");
}
}
$result=mysql_查询(“从角色中选择*);
$roles=array();
while($role=mysql\u fetch\u assoc($result)){
$roles[]=$role;
}
//构建树的函数
函数生成树($roles,$parent\u id=0){
$tree=array();
foreach($roles作为$role){
如果($role['parent\u id']==$parent\u id){
$tree[]=数组(
“角色”=>$role,
'children'=>build_树($roles,$role['parent_id'))
);
}
}
返回$tree;
}
//用于遍历和输出树的函数
函数打印树($tree){
如果(计数($tree)>0){
打印();
foreach($树中的节点){
打印(- );
htmlspecialchars($node['role']['role_name']);
打印树($node['children']);
打印(“
”);
}
打印(“
”);
}
}
以及您试图解决此问题的代码?请加上它。这可能应该是一个评论。它没有回答任何问题,因为没有真正需要回答的问题。Leon我需要它就像是一个条目,在它下面是这样的视图,只是我像其他人评论的那样展示了它,请提供代码或更多说明,说明如何在网页上显示此功能。我是否可以建议将函数命名为比makeStuffOccess
更具描述性的名称?可能是输出\u层次结构
。