本帖最后由 phper002 于 2011-01-11 18:42:16 编辑

解决方案 »

  1.   

    function tree($parentid, $level = 0)
    {
    $result = mysql_query("Select * FROM category Where parentid = {$parentid}");
    while($row = mysql_fetch_array($result))
    {
    echo str_repeat(" ", 2 * $level) . $row['catname'].'<br />';
    tree($row['catid'], ++ $level);
    }
    }
    if(($parentid + 0) < 1) $parentid = 0;
    tree($parentid);
      

  2.   

    你可以考虑根据数据的特点, 把sql语句降低一下, 不然这个可能太猛了...
      

  3.   

    把sql语句的数量降低...你这样, 如果每一级有10个类别:
    1级需要: 1条sql
    2级需要: 1 + 10条sql
    3级需要: 1 + 10 + 100条sql
    4级需要: 1 + 10 + 100 + 1000条sql
      

  4.   


    $result = mysql_query("Select * FROM category Where parentid = {$parentid}");
    改为
    $result = mysql_query("Select 需要的字段 FROM category Where parentid = {$parentid}");
      

  5.   


    while($row = mysql_fetch_array($result)) 改为while($row = mysql_fetch_array_assoc($result))
      

  6.   

    比如, 我用这样一个递归
    function retrieval($pids) {
      $result = mysql_query("Select * FROM category Where parentid in (" . implode(",", $pids) . ")");
      $result = array_merge(retrieval(这里传入检索出的本级的类别id数组));
    }
    这个递归, 用4个sql就可以完成4级的查询...当然, 这种方式也有自己的缺点, 比如随着级别的深入, 发送的sql语句就变大了..所以, 要根据你自己的数据特点来做才好...你现在的目的就是要把数据库中的这些树状数据取出来, 展现成一个树..
    但是, 把这些数据取出来, 并不一定要一条一条的去发那么多的sql, 可以简化取数据的方式, 因为发送很多条sql执行毕竟是比较慢的....
    所以, 把数据三下五除二整出来...
    到了内存里面, 那就随你怎么折腾了..
      

  7.   

    判断循环的次数  用static 变量存储
      

  8.   

    function tree($parentid, $level = 0)
    {
    $result = mysql_query("Select * FROM category Where parentid = {$parentid}");
    while($row = mysql_fetch_array($result))
    {
    echo str_repeat("&nbsp;", 2 * $level) . $row['catname'].'<br />';
    tree($row['catid'], ++ $level);
    }
    }
    if(($parentid + 0) < 1) $parentid = 0;
    tree($parentid);这个代码不行吗?
    那改成&nbsp;试试吧
    另外,尽量自己多考虑考虑问题的解决方法,其实,很多人不愿意直接给你答案,是为了不让你成为没有思想,只会摘抄的无用之人能到社区中来无偿回答问题,帮助别人的人,都不是什么坏人,楼主还是本着一颗宽容的心去多思考思考问题吧心能静下来是关键。
      

  9.   

    数据少,一个sql取全部数据,数组操作
    数据多,引入ajax tree,每点一个节点,只load对应的子节点。