一颗树结构的菜单,要求兄弟节点间可以实现排序,所以我的数据库表(mulushu0 )是这样设计的
leibieid(类别ID)
leibiemc(类别名称)
fuleiid(父类id)
nextid(下一节点ID)点击一个节点,传该节点的ID到后台,后台读取该节点下的子节点,然后返回页面
也就是说这棵树不是一次性读取完整的,而是用ajax传递父节点,读子节点的,
我的SQL是这样写的,
select * from mulushu0 where fuleiid='传值的父类ID' or leibieid='传值的父类ID' 可是这样没法实现兄弟节点间的排序,请问高手SQL要怎么写啊??
leibieid(类别ID)
leibiemc(类别名称)
fuleiid(父类id)
nextid(下一节点ID)点击一个节点,传该节点的ID到后台,后台读取该节点下的子节点,然后返回页面
也就是说这棵树不是一次性读取完整的,而是用ajax传递父节点,读子节点的,
我的SQL是这样写的,
select * from mulushu0 where fuleiid='传值的父类ID' or leibieid='传值的父类ID' 可是这样没法实现兄弟节点间的排序,请问高手SQL要怎么写啊??
给你个例子
select employee_id,manager_id,first_name,last_name
from employees
start with employee_id=1
connect by prior employee_id=manager_id这个地方要注意顺序
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
用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 它可以排序但是不改变树的结构
这里借上面兄弟的数据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行。