这个需要用程序递归处理
专注于为中小企业提供网站设计制作、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业修武免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
$dept_tree=[];
$deptid = 19;
while($deptid0){
//假设你的数据库查询是这个函数,根据条件直接查询一条记录返回
$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'='经理助理',
),
)
我代码中有一段类似的,也是网上找的,你可以参考下
SELECT CATE_CODE AS ID,PARENT_CODE AS 父ID ,levels AS 级数, paths AS 路径 FROM (
SELECT CATE_CODE,PARENT_CODE,
@le:= IF (PARENT_CODE = 0 ,0,
IF( LOCATE( CONCAT('|',PARENT_CODE,':'),@pathlevel) 0 ,
SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',PARENT_CODE,':'),-1),'|',1) +1
,@le+1) ) levels
, @pathlevel:= CONCAT(@pathlevel,'|',CATE_CODE,':', @le ,'|') pathlevel
, @pathnodes:= IF( PARENT_CODE =0,',0',
CONCAT_WS(',',
IF( LOCATE( CONCAT('|',PARENT_CODE,':'),@pathall) 0 ,
SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,CONCAT('|',PARENT_CODE,':'),-1),'|',1)
,@pathnodes ) ,PARENT_CODE ) )paths
,@pathall:=CONCAT(@pathall,'|',CATE_CODE,':', @pathnodes ,'|') pathall
FROM doc_category,
(SELECT @le:=0,@pathlevel:='', @pathall:='',@pathnodes:='') vv
ORDER BY PARENT_CODE,CATE_CODE
) src
ORDER BY CATE_CODE
你好,很高兴回答你的问题。
要实现你的需求的sql大概是下面这样的。
select t1.id,t1.parent_id,t1.module_code,t1.module_name,t2.id,t2.parent_id,t2.module_code,t2.module_name,t3.id,t3.parent_id,t3.module_code,t3.module_name from 表名 t1,表名 t2,表名 t3 where t1.parent_id=0 and t2.parent_id=t1.ID and t3.parent_id=t2.id。
如果有帮助到你,请点击采纳。
这个需要查看下你的表是怎么设计的
在我的想法中,至少这张表中要有一个字段,就是parent_id
你可以规定当parent_id 为0时为一级目录,所以你可以根据parent_id=0来确定是一级目录
子级就要看你是否是需要子级下面的子级 还是只是需要子级
如果是第二种就简单了,根据parent_id = id可以查出下面的子级
如果是第一种,在mysql里面就需要写函数或存储过程了 一级级往下走 直到子级为空
Oracle就方便些,他提供了一个函数可以直接调用就行
start with…connect by prior
可以参考:网页链接