我也有同样的问题。我想需要做的是四个字段
一个唯一标识,
一个内容,
一个父结点标识,
一个子节点标识。根节点的父结点标识为0。若无子节点,子节点标识也为0。但我的树没有一子多父的情况,不知你有没有。这样sql语句没什么难写。数据结构的书中说,
如果对速度没什么特殊要求,子节点标识也可以不要。
但这样若要得到子结点可能要遍历整个树。但我只能通过算法遍历树,却写不出算法来选出某些符合条件的节点
如给一个父结点,列出所有的儿子、孙子,重孙子什么的...
或给一个子结果,列出他一直到祖宗的亲戚关系...
遍历的算法没什么难,但把他们选出来做为一个结果集,我写不出来
用cursor也不行...哪位高手会,希望一同探讨!
一个唯一标识,
一个内容,
一个父结点标识,
一个子节点标识。根节点的父结点标识为0。若无子节点,子节点标识也为0。但我的树没有一子多父的情况,不知你有没有。这样sql语句没什么难写。数据结构的书中说,
如果对速度没什么特殊要求,子节点标识也可以不要。
但这样若要得到子结点可能要遍历整个树。但我只能通过算法遍历树,却写不出算法来选出某些符合条件的节点
如给一个父结点,列出所有的儿子、孙子,重孙子什么的...
或给一个子结果,列出他一直到祖宗的亲戚关系...
遍历的算法没什么难,但把他们选出来做为一个结果集,我写不出来
用cursor也不行...哪位高手会,希望一同探讨!
第一层节点: aa
第二层节点: aabb
第三层节点: aabbcc
......这样做用like语句就都可以查询了
而且若对树操作时岂不是要做字符串操作...
更慢...不管怎么样,我承认这是一种办法
每一个树节点在主表中有一条纪录
一个主表:
ID,名称,值,父亲ID,其他属性一个字表:
ID,FatherID
所有在主表中的每一条纪录在子表中存储其直接儿子
上面文章说错了:每一个树节点在主表中有一条纪录
一个主表:
ID,名称,值,父亲ID,其他属性一个字表:
ID,ChildID
所有在主表中的每一条纪录在子表中存储其直接儿子例如:
下面树的存储
a
b
d
e
c
f
g主表:
ID,Name, ……,ParentID
1, a ……,null
2, b ……,1
3,c ……,1
4, d ……,2
5, e ……,2
6, f ……,3
7, g ……,3子表:
ID,ChildID
1 2
1 3
2 4
2 5
3 6
3 7枚举任何一个节点的子结点容易,但是枚举任何一个接点的所有后继结点则
不可能通过一条SQL语句完成,只有依赖循环或者递归完成(可以用存储过程完成)