我也有同样的问题。我想需要做的是四个字段
一个唯一标识,
一个内容,
一个父结点标识,
一个子节点标识。根节点的父结点标识为0。若无子节点,子节点标识也为0。但我的树没有一子多父的情况,不知你有没有。这样sql语句没什么难写。数据结构的书中说,
如果对速度没什么特殊要求,子节点标识也可以不要。
但这样若要得到子结点可能要遍历整个树。但我只能通过算法遍历树,却写不出算法来选出某些符合条件的节点
如给一个父结点,列出所有的儿子、孙子,重孙子什么的...
或给一个子结果,列出他一直到祖宗的亲戚关系...
遍历的算法没什么难,但把他们选出来做为一个结果集,我写不出来
用cursor也不行...哪位高手会,希望一同探讨!

解决方案 »

  1.   

    考虑速度,还是这样省事一些。
    第一层节点: aa
    第二层节点: aabb
    第三层节点: aabbcc
    ......这样做用like语句就都可以查询了
      

  2.   

    老大,like的模糊查询只能降低速度...
    而且若对树操作时岂不是要做字符串操作...
    更慢...不管怎么样,我承认这是一种办法
      

  3.   

    用一个主子表结构
    每一个树节点在主表中有一条纪录
    一个主表:
    ID,名称,值,父亲ID,其他属性一个字表:
    ID,FatherID
    所有在主表中的每一条纪录在子表中存储其直接儿子
      

  4.   

    用一个主子表结构
    上面文章说错了:每一个树节点在主表中有一条纪录
    一个主表:
    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语句完成,只有依赖循环或者递归完成(可以用存储过程完成)