这个需要用程序递归处理$dept_tree=[];
$deptid = 19;
while($deptid>0){
//假设你的数据库查询是这个函数,根据条件直接查询一条记录返回
$dept = getone('department',['id'=>$deptid]);
//防止数据丢失出错
if(empty($dept))break;
array_unshift($dept_tree,$dept);
$deptid = $dept['dep_parentid'];
//如果需要防止数据错乱出现递归,这里可以判断一下
if(in_array($deptid,array_column($dept_tree,'id') !== false){
//说明职位关系乱了,有死循环
break;
}
}
可以把这段代码封装成一个函数使用。这里就不论从哪一级开始查询了,总是能把该职位及其上级全部查询出来,按顺序放进数组里
$dept_tree 类似这样array(
0=>array(
'id'=>1,
'dep_parentid'=>0,
'dep_name'=>'顶级',
),
1=>array(
'id'=>2,
'dep_parentid'=>1,
'dep_name'=>'国灿金融',
),
2=>array(
'id'=>4,
'dep_parentid'=>2,
'dep_name'=>'招聘部',
),
3=>array(
'id'=>19,
'dep_parentid'=>4,
'dep_name'=>'经理助理',
),
)