关于递归后从子级找到父级的问题
表结构:
t1_type
typeId name fatherId
1 a 0
2 b 0
3 a1 1
4 a2 1
t2_info
id title typeId
1 aaa 3
2 bbb 3
........
现在只能从子级的 t2_info表 typeId -> 3
要得到 a->a1->a2 的栏目名称 可能会涉及的十个栏目 有什么好的解决方案没呢?
------解决方案--------------------读成多叉树行吗?
------解决方案--------------------修改表结构,增加一列NodePath,如下:
ID Name ParentID NodePath
1 办公管理 0 1
2 系统管理 0 2
3 加班 1 1,3
4 报销 1 1,4
5 流程管理 2 2,5
6 餐补 1 1,4,6
如 餐补的栏目排序就是: 办公管理 -> 报销 -> 餐补
根据 餐补 的 ID = 6
select NodePath from 表 where ID=6
得到 NodePath 为 “1,4,6”
判断一下,可以知道“餐补”为三级节点。
同理知道“餐补”所在的上级节点的ID为“4”(也就是“报销”),上上级节点的ID为“1”(也就是“办公管理”)
使用sql 语句:
select * from 表 where ID in(1,4,6)
------解决方案--------------------不修改表结构的话,我也只会在程序里使用递归的方式。先取出来最低一级,再去取上一级。。。
如果节点层级太多,性能就太低了。
我还是建议你修改表结构。。。多加一列,然后写一段小程序,把NodePath的数据算出来。。。