日期:2014-05-17  浏览次数:20463 次

关于递归后从子级找到父级的问题
表结构:
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的数据算出来。。。