一颗树结构的菜单,要求兄弟节点间可以实现排序,所以我的数据库表(mulushu0 )是这样设计的
leibieid(类别ID)  
leibiemc(类别名称)   
fuleiid(父类id)  
nextid(下一节点ID)点击一个节点,传该节点的ID到后台,后台读取该节点下的子节点,然后返回页面
也就是说这棵树不是一次性读取完整的,而是用ajax传递父节点,读子节点的,
我的SQL是这样写的,
select * from mulushu0 where fuleiid='传值的父类ID' or leibieid='传值的父类ID' 可是这样没法实现兄弟节点间的排序,请问高手SQL要怎么写啊??

解决方案 »

  1.   

    用start with... connect by 就可以实现了子节点和父节点的关联
    给你个例子
    select employee_id,manager_id,first_name,last_name
    from employees
    start with employee_id=1
    connect by prior employee_id=manager_id这个地方要注意顺序
      

  2.   

    drop table PROBLEMSTYPE;
    create table PROBLEMSTYPE(  
      PROBLEMTYPEID varchar2(20), 
      PROBLEMTYPENAME varchar2(20), 
      PROBLEMLEVEL varchar2(20), 
      PARENTTYPEID varchar2(20), 
      TYPEPATH  varchar2(200), 
      DESCRIPTION varchar2(200) 
    );
    insert into PROBLEMSTYPE select '0','类型名称0','问题类型所在层次0',null,'路径0','描述0' from dual;
    insert into PROBLEMSTYPE select '1','类型名称1','问题类型所在层次1','0','路径1','描述1' from dual;
    insert into PROBLEMSTYPE select '2','类型名称2','问题类型所在层次2','1','路径2','描述2' from dual;
    insert into PROBLEMSTYPE select '3','类型名称3','问题类型所在层次3','1','路径3','描述3' from dual;
    insert into PROBLEMSTYPE select '4','类型名称4','问题类型所在层次4','2','路径4','描述4' from dual;
    insert into PROBLEMSTYPE select '5','类型名称5','问题类型所在层次5','3','路径5','描述5' from dual;
    insert into PROBLEMSTYPE select '6','类型名称6','问题类型所在层次6','1','路径6','描述6' from dual;select level as 层级,
           decode(level, 1,'*', 2,'**', 3,'***', 4,'****') 层次星星数,
           CONNECT_BY_ROOT(PROBLEMTYPEID) 最顶层,
            PROBLEMSTYPE.*
    from PROBLEMSTYPE 
    start with PARENTTYPEID is null 
    connect by prior PROBLEMTYPEID=PARENTTYPEID ;--结果如下:
          层级 层次星星数 最顶层               PROBLEMTYPEID        PROBLEMTYPENAME      PROBLEMLEVEL         PARENTTYPEID         TYPEPATH                                                                         DESCRIPTION
    ---------- ---------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
             1 *          0                    0                    类型名称0            问题类型所在层次0                         路径0                                                                            描述0
             2 **         0                    1                    类型名称1            问题类型所在层次1    0                    路径1                                                                            描述1
             3 ***        0                    2                    类型名称2            问题类型所在层次2    1                    路径2                                                                            描述2
             4 ****       0                    4                    类型名称4            问题类型所在层次4    2                    路径4                                                                            描述4
             3 ***        0                    3                    类型名称3            问题类型所在层次3    1                    路径3                                                                            描述3
             4 ****       0                    5                    类型名称5            问题类型所在层次5    3                    路径5                                                                            描述5
             3 ***        0                    6                    类型名称6            问题类型所在层次6    1                    路径6                                                                            描述67 rows selected
      

  3.   

    引用 1 楼 Megan2008 的回复:
    用start with... connect by 就可以实现了子节点和父节点的关联 
    给你个例子 
    select employee_id,manager_id,first_name,last_name 
    from employees 
    start with employee_id=1 
    connect by prior employee_id=manager_id这个地方要注意顺序加一句这个可以实现排序   
    order  siblings BY 它可以排序但是不改变树的结构
      

  4.   


    这里借上面兄弟的数据sample了SQL> select lpad(' ',level*5)||PROBLEMTYPENAME t1, PROBLEMLEVEL  from PROBLEMSTY
    PE connect by prior PROBLEMTYPEID=PARENTTYPEID start with PARENTTYPEID  is null
    order siblings by PROBLEMTYPENAME desc;T1                                       PROBLEMLEVEL
    ---------------------------------------- --------------------
         类型名称0                           问题类型所在层次0
              类型名称1                      问题类型所在层次1
                   类型名称6                 问题类型所在层次6
                   类型名称3                 问题类型所在层次3
                        类型名称5            问题类型所在层次5
                   类型名称2                 问题类型所在层次2
                        类型名称4            问题类型所在层次4已选择7行。
      

  5.   

    用start with .... connect by prior ....语句解决
      

  6.   

    start with .... connect by prior ....可以实现,具体使用方法,自己查一下!