1#楼 |
|
|
回复人:一起PHP |
注册时间:2004-02-27 |
主题/回复:247/1521 |
积分:4649 |
等级:★★★★★☆(十一级) |
称号:论坛圣人 |
|
|
|
1#楼 发表于2005-03-16 22:43:01
评分:1
|
|
用循环嵌套可以实现
情况分为两种,如果知道树的深度,比如说这个树最多N层,那么可以这样:
具体代码没法写,写个“伪”码
查询pid=0的,结果放在list1中 //也就是找到树的根
如果list1为空 //说明没有根,整个循环结束
否则
输出根 //这个地方输出了a01
取id放入id1
查询pid=id1的纪录,放入list2 //找到第一层子节点
如果list2为空 //说明没有叶子,循环全部结束
否则 //说明有叶子
循环list2,直到list2到头
输出第一层叶子 //这地方循环输出了a11,a12
取出id放入id2
查询pid=id2的纪录,放入list3
如果list3为空 //没有第二层叶子
否则
输出第二层叶子 //输出了a21,a22....
.............. //以此类推,查找到第N层
循环输出第N层的叶子
结束第N层循环
结束第N-1层循环
............
结束第一层循环
上面是第一种情况。
第二种情况,也就是无法知道确切的树的深度,那么可以用count(*)群集函数,获得树的深度,如何获得呢?比如:
select count(*) as deep group by pid
这样一查询,就知道了树的深度,如果知道了树的深度为M,用循环控制,执行M次嵌套查询,最终也能实现上述结果。
一般的应用当中,树的深度一般不会超过5层,所以用第一种穷举的方法,基本可以达到要求。
|
|
2#楼 |
|
|
回复人:slopesun |
注册时间:2004-09-07 |
主题/回复:58/67 |
积分:753 |
等级:★★★(六级) |
称号:声名鹊起 |
|
|
|
2#楼 发表于2005-03-18 19:00:15
评分:×
|
|
其实我在网上也搜索到许多相关的类,研究了好久,可惜没看懂。感觉有点难。再花几天好好啃啃
我是想实现你所说的第二种情况的效果。即无限级的。
|
|