第一种方案,当id类型为整型时:
我们除了有一个记录父id字段外,还应有一个路径的字段如部门:detp(id , pid , path , name)。则有记录如下:
1 , 0 , '/0/1' , '部门A'
2 , 0 , '/0/2' , '部门B'
3, 1 , '/0/1/3', '部门A.01'
4, 2 , '/0/2/4', '部门B.01'
5, 3 , '/0/1/3/5', '部门A.01.a'
...
当多了path字段后,可以更加便捷的查询了如:
已知当前部门 xxx_dept(5, 3 , '/0/1/3/5', '部门A.01.a')
1.查询其同部门
select * from xxx_dept where pid = 3;
2.查询其子部门
select * from xxx_dept where path like '/0/1/3/5%'
3.查询其父部门
select * from xxx_dept where '/0/1/3/5' like path+'%'
4.同样删除也就变得简单了
当id 为char时
这时我们就在id这里做改造了,表结果 xxx_dept(id,pId,name),有如下数据:
'001' , '0' , '部门'
'00101' , '001' , '部门A'
'00102', '001' , '部门B'
'0010201','00102' , '部门B1'
...
这时的结构就与上面差不多了,查询方式也差不多了