查找某个部门下所有子部门以及最下级部门或者查找某个部门的所有父部门以及最上级部门(个人总结,不喜勿喷)

一、查找某个部门下所有子部门以及最下级部门,一个部门会有多个子级

设计部门表department,有parent_id可以绑定直接上级部门,level可以给部门分层级,对于后期查找上级或者下级部门很有用,可以以此为顺序查找

字段:id, parent_id(所属上级部门id), name(部门名称),level(部门层级,比如最上级的部门为1,他下面的部门为2,以此类推)

实现思路:

1.查找部门id为1的所有子部门,查找部门的level

select level from department where parent_id=1

2.设取出来的部门level为1,查找所有部门level > 1,按照level正序排序,保证遍历时的数据是从高层部门到低层部门的

select * from department where level> 1 order by leavel

执行完后,查出来的是所有符合要求的部门list_dep

3.遍历list_dep,最先遍历的数据肯定是后面数据的上层部门

list_children_dep = []   # 存储所有子部门,且按照level排序的

list_dep_id = [1]   # 存储目的部门下的所有子部门id,按照上下层顺序存储

for dep in list_dep:

     #查找部门的父类id是否存在于list_dep_id中:存在,代表是符合要求的子部门,不存在,代表不是当前部门的子部门或者间接子部门

     if dep.parent_id.id in list_dep_id:

          list_children_dep.append(dep)

4.list_children_dep就是最后当前部门的所有子部门,第一个数据就是直接子部门之一,最后一个数据就是最后子部门之一

二、查找某个部门下所有父部门以及最上级部门(根部门),一个部门只有一个上级部门

类似第一种情况,不过从第2步开始有改动

2.设取出来的部门level为10,查找所有部门level < 10,按照level倒序排序,保证遍历时的数据是从低层部门到高层部门的,这样就可以保证最后查出的部门就是根部门

select * from department where level < 10 order by leavel desc

执行完后,查出来的是所有符合要求的部门list_dep

3.遍历list_dep,最先遍历的数据肯定是后面数据的下层部门

list_parent_dep = []   # 存储所有父部门,且按照level倒序排序的

dep_A   # 代表当前部门

for dep in list_dep:

     #查找当前部门的上级部门是否为dep,如果是,则存储到列表中,且将当前部门指定的对象变为当前的dep;不是则不处理

     if dep_A.parent_id.id == dep.id:

          list_parent_dep.append(dep)

          dep_A = dep

4.list_parent_dep中存储的就是当前部门的所有上级部门,按照层级,从低到高,第一个数据就是当前部门的直接上级部门,最后一个就是当前部门的最上级部门,即根级部门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值