一个查询的问题

我有 user表

userid username password deptid

dept表

deptid deptname parentId(父部门)

现在有要 查询出所有的 部门 --(子部门) 用js 树现实;;

现在的问题是我不知道 怎么区分 等级部门 和 子部门 和 子子部门;

--比如 dept

deptid deptname parentId

1 顶层 0
2 次层 1
3 次次层 2

4 2层 1

js 树

顶层
---- 次层
--------次次层
-----2层

效果就是以上 现在怎么select 顶层 和次 层的查询 都不知道

有会的 帮帮把

[b]问题补充:[/b]
几层是未知的...
[b]问题补充:[/b]
给个具体的 例子 和演示把....谢谢了..

要么你重新设计一下你的表结构

dept表
deptid deptname parentId(父部门) hasSubDept(是否有子部门)

然后每次可以根据一个部门ID来获取他的父部门和子部门

一般是一次性查出所有的数据吧
然后根据具体的父子节点关系来构建树形结构

我原来用DHTMLTREE做过一个树形结构,挺方便的
参考[url]http://itren.iteye.com/blog/160367[/url]

你总共有几层,这个很重要,这决定子查询的次数,如果层数不知道,就很难写了

还是我说的,选择所有的部门信息生成一个xml文件,然后配合dhtmlxtree来构建一个树形结构

DHTMLXTREE
[url]http://www.dhtmlx.com/docs/products/dhtmlxTree/[/url]

[url]http://www.cnblogs.com/yayagepei/articles/894666.html[/url]

写个递归的查询函数或存储过程(因为你的层数是未知的),估计要找出他的这种层级关系,只有通过递归查询了

你这种表设计实现方式不科学,deptid应该采用规则编码格式,例:0001,00020001类似的.
0001是根节点,那么他的子节点都是以0001开头的,如00010002,0001003,00010001002.那么如果你要区分子节点和孙子节点的话,只要看位数就行了.parentId视情况,可要可不要.例:
我想得到0001这个节点的子节点,我可以这样
select * from table where depid like '0001____';
如果我想得到所有的子孙节点:
select * from table where depid like '0001%';

我来分享一下我处理数据存储读取问题的经验
如果lz使用的数据库是oracle数据库,可以参考使用start with...connect by...
[url]
http://www.iteye.com/problems/3425[/url]

如果不能确定数据库,那么只好继续寻找方式:
既然lz已经有parentId了,可以增加一列“深度”,表现当前部门到底是根还是子子部门,
[table]
deptid|deptname|parentId|deplevel
1|顶层|0|0
2|次层|1|1
3|次次层|2|2
4|2层|1|1
5|2层子|4|2
[/table]
存的时候,deplevel取父部门的deplevel+1就行了
取的时候,order by deplevel asc,deptid asc,这样就可以取为
[table]
deptid|deptname|parentId|deplevel
1|顶层|0|0
2|次层|1|1
4|2层|1|1
3|次次层|2|2
5|2层子|4|2
[/table]
这样的数据顺序似乎不符合人的感官要求,但是这样的数据顺序能确保每个结点在加载时,它的父结点已经加载上了。所以对于js而言基本上已经可以使用了。
如果你的html展现层需要处理为特殊的格式,可以再在服务器端调整

处理页面展现方式楼上的给了挺多的,不多说了

递归啊递归啊递归.
要不就很粗糙得限定层次.

朋友,问题要自动关闭啦,结分哦