1.连接数据库(略)
2.$sql="select * from 表名 where pid=10 ";
  $result = mysql_query($sql);
  if(mysql_num_rows ($result)>0)
       ShowTreeMenu($link,$result,$layer,$ID);
3.function ShowTreeMenu($link,$result,$layer)
  {
     while($menu = $db->dbFetch($result))
     { 
       $sql="select * from 表名 where pid=$menu[ID]";
       $result_sub = $mysql_query($sql); 
       if($db->recNum($result_sub)>0)
       {
          mysql_query("update 表名 set state=1"); 
          $layer++;
          ShowTreeMenu($link,$result_sub,$layer);
          $layer--;
       }
     }
   }
大体思路是这样,代码没有仔细的调过。
       

解决方案 »

  1.   

    就有效的办法就是你增加一个字段来表示当前点所处位置,如你可增加一个叫FullIdList的字段,其功能就象word中你写文档时的标题编号。举个例子
    名称       ID   Pid  State   fullidlist
    目录一     10    0    0      NULL
    目录一:1   11   10    0      10.
    目录一:1:1 12   11    0      10.11.
    目录一:2   13   10    0      10.
    目录二     14    0    0      NULL
    目录二:1   15   14    0      14.以目录一:1:1为例,10.11.表示这个节点的寻址路径是10-->11,表示该点是10.11下这层下的子节点,这样当你选中“目录一”这一点时,以“10.”开头的点就是该点下的子孙节点,通过sql语句就可以方便实现你所需要的结果。
      

  2.   

    这种做法在我的一些业务应用系统中用了N次了,我觉得是最高效最好用的一种,目前利用这种方式我也可以实现类似msdn、csdn的那种动态刷新管理的基于xml的海量树状结构。
      

  3.   

    增加一个字段应该不影响你其他部分的功能~~~
    因为这个字段只在这个功能上应用~~~不论你其他的地方update,delete,select,实际上只要不对新增字段设置完整性约束,那就不会有任何问题~~~小鬼的方法挺好,你还是试试吧~~~~还有,不知道能不能用SQL语句来完成~~~~
    我想总可以通过内联来做一个集合~~~然后在这个集合中查询某字段为10的记录~~~
    还没有想清楚,不过如果你的目录层次不是无限大,这个方法应该可以~~~~