首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  PHP+MYSQL编程 » [提问] 一个树型显示的问题  


  作者:slopesun
  注册时间:2004-09-07
  主题/回复:58/67
  积分:753
  等级:★★★(六级)
  称号:声名鹊起

  ken.wang@esolux...
  185627321
  www.

 

 发表:2005-03-16 05:20:31 阅读 2157 次 回复 2 次 得分1  |   字号 字色
[提问] 一个树型显示的问题
在文章系统中经常看到‘树型显示’‘平板显示’的显示方式。我不知道树型显示是如何实现的。

我有一个表,结构、数据如下:
id    pid    (pid为父id)
a01   0
a11   a01
a12   a01
a21   a11
a22   a11
a33   a21
a34   a21
我想显示为如下的树型形式,程序该如何写?或者给个思路
a01
 |__a11
 |   |__a21
 |   |   |__a33
 |   |   |__a34
 |   |__a22
 |__a12
 
 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  评分:× 

其实我在网上也搜索到许多相关的类,研究了好久,可惜没看懂。感觉有点难。再花几天好好啃啃
我是想实现你所说的第二种情况的效果。即无限级的。
  页数1/1首页 « 1 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.004sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版