怎么能做个查询,能够获取树中某一个节点其下属于它自己的所有节点的各种信息,而且还要遍历所有节点获取所有节点其下节点的信息,我研究了几天,但是除了递归嵌套,实在想不出什么更好的,速度更快的办法,数据库里有一个ID数据,是表示节点的唯一标志,没有重复,还有一个PID,表示该节点所属的父节点ID,还有一个TLEVEL,表示该节点在树中属于第几层,
我的方法是根据该节点的ID关联PID,先获取它下一层所有节点的信息,然后再根据这层里属于它的所有节点ID获取下下一层的信息,依次类推,但是这样的做法太慢了,尤其是树的层次和节点变多了以后,简直是无法忍受的慢,大家有没有更好的办法呢?也欢迎大家来讨论!来者有分!
24 个解决方案
#1
如果真的是无限的话,也只好递归了。
#2
或者说数据表的结构修改一下,能不能改成有利于快速查询呢?!我目前还仅仅只是想到这个方法,实在是想不出更好的方法了,召唤高手!
#3
分可以再加,我有的是分!
#4
在表中加当前纪录ID的深度。
#5
哦,我没看到有层次的。
那可以先把最深层找出来,然后再循环啊。
那可以先把最深层找出来,然后再循环啊。
#6
http://www.hz0752.com/UploadFile/2005-5/2005524155546821.jpg
是不是想要上图的效果
是不是想要上图的效果
#7
循环到下面有很多节点根本就不是你的,TLEVEL基本只能用来做做判断而已!
#8
to bbsftp(烨) :不是这样的,是数型的,有很多层次的那种!而且层次不确定,你这个的只有一个层次!
#9
oracle
start with
start with
#10
递归查询
#11
是不是要这种效果啊
http://www.hz0752.com/UploadFile/2005-5/2005527203753567.jpg
http://www.hz0752.com/UploadFile/2005-5/2005527203753567.jpg
#12
1.加LEVEL
2.首先建立TopItem或者它的直接下级,然后在点树的时候再展开节点信息.
2.首先建立TopItem或者它的直接下级,然后在点树的时候再展开节点信息.
#13
to bbsftp(烨):对,就是这个效果!
#14
to 5207(踏雪):加LEVEL了,但是你说的第二个不是太明白,另外,我是说在数据库里做查询的时候怎么做,在treeview控件里这个好办,毕竟人是活的,电脑是死的!
#15
顶!
#16
如果是 Oracle 数据库,倒是可以用
select ...from ... start with...connect by prior...这样的语句快速查询。
别的数据库不知道了。
dacong(大聪) 上面也提到了。
select ...from ... start with...connect by prior...这样的语句快速查询。
别的数据库不知道了。
dacong(大聪) 上面也提到了。
#17
这个问题我也碰到过,嵌套到后来简直无法容忍其“慢”,在网上搜个第三方控件DBTREE,带例子,你会发现实现你的目标非常EASY。
#18
哦,ORACLE可以啊,不过我的数据库是SQL SERVER的!DBTREE控件我用不上它,只是要查询而已,但是这个问题我查找了关于DBTREE的算法,基本上没有什么帮助!它只能获取全局树,对于获取子树下的节点信息方面,几乎没有任何帮助!还是只能通过挨个遍历,遍历里面再加嵌套才能实现!真是郁闷!
#19
感觉复杂点的树问题,还是要第归
#20
数据结构上用了个非第归的,我没怎么搞懂,考虑使用堆栈解决
#21
恩,我明天找找算法的书看看!
#22
找到了,不过晕了,算法的书也是那个德行,照样离不开递归!没办法了!只好这样了!
#23
up
#24
shit
#1
如果真的是无限的话,也只好递归了。
#2
或者说数据表的结构修改一下,能不能改成有利于快速查询呢?!我目前还仅仅只是想到这个方法,实在是想不出更好的方法了,召唤高手!
#3
分可以再加,我有的是分!
#4
在表中加当前纪录ID的深度。
#5
哦,我没看到有层次的。
那可以先把最深层找出来,然后再循环啊。
那可以先把最深层找出来,然后再循环啊。
#6
http://www.hz0752.com/UploadFile/2005-5/2005524155546821.jpg
是不是想要上图的效果
是不是想要上图的效果
#7
循环到下面有很多节点根本就不是你的,TLEVEL基本只能用来做做判断而已!
#8
to bbsftp(烨) :不是这样的,是数型的,有很多层次的那种!而且层次不确定,你这个的只有一个层次!
#9
oracle
start with
start with
#10
递归查询
#11
是不是要这种效果啊
http://www.hz0752.com/UploadFile/2005-5/2005527203753567.jpg
http://www.hz0752.com/UploadFile/2005-5/2005527203753567.jpg
#12
1.加LEVEL
2.首先建立TopItem或者它的直接下级,然后在点树的时候再展开节点信息.
2.首先建立TopItem或者它的直接下级,然后在点树的时候再展开节点信息.
#13
to bbsftp(烨):对,就是这个效果!
#14
to 5207(踏雪):加LEVEL了,但是你说的第二个不是太明白,另外,我是说在数据库里做查询的时候怎么做,在treeview控件里这个好办,毕竟人是活的,电脑是死的!
#15
顶!
#16
如果是 Oracle 数据库,倒是可以用
select ...from ... start with...connect by prior...这样的语句快速查询。
别的数据库不知道了。
dacong(大聪) 上面也提到了。
select ...from ... start with...connect by prior...这样的语句快速查询。
别的数据库不知道了。
dacong(大聪) 上面也提到了。
#17
这个问题我也碰到过,嵌套到后来简直无法容忍其“慢”,在网上搜个第三方控件DBTREE,带例子,你会发现实现你的目标非常EASY。
#18
哦,ORACLE可以啊,不过我的数据库是SQL SERVER的!DBTREE控件我用不上它,只是要查询而已,但是这个问题我查找了关于DBTREE的算法,基本上没有什么帮助!它只能获取全局树,对于获取子树下的节点信息方面,几乎没有任何帮助!还是只能通过挨个遍历,遍历里面再加嵌套才能实现!真是郁闷!
#19
感觉复杂点的树问题,还是要第归
#20
数据结构上用了个非第归的,我没怎么搞懂,考虑使用堆栈解决
#21
恩,我明天找找算法的书看看!
#22
找到了,不过晕了,算法的书也是那个德行,照样离不开递归!没办法了!只好这样了!
#23
up
#24
shit