php 三级分类问题(非递归方式),怎么从数据库中取出?怎么smarty成一下形式?日志
  --我的日志
  ----我的日志1
  --你的日志
  ----你的日志1
新闻
  --国内新闻
  ----国内新闻1
  --国际新闻
  ----国际新闻1
数据库结构如下:

解决方案 »

  1.   

    smarty不会
    非递归方式就是循环两次:
    1.循环读出(可能要先按id排序一下),制作一个字串,例如newid,把id用连接符拼接起来
    2.对newid排序
    3.对排序后的newid循环输出array(
    "1"=>"新闻",
    ……
    "1-3"=>"国内新闻",
    "1-3-11"=>"国内新闻1",
    ……
    "1-3-xx"=>"国内新闻2",
    ……
    )
    * 因为都是不重复的id,拼接的newid肯定是不重复的,用正则检查已生成newid最后的所有数字和fid相同就拼接上去
    * newid数组用ksort排序就行
    * 正则提取newid的\D就是层数
      

  2.   

    那你通过建立数据库表来实现吧,建立3张表,只要写个sql视图,就可以。
      

  3.   

    就如楼主的数据库结构,取数据可以直接按照不同等级,一级一级的取不就行了。
    $grade_1 = 'select * from cate where fid = 0;';
    //抽取$grade_1各记录的ID,得到$grade_2的fid-- $grade_2_fids
    $grade_2 = 'select * from cate where fid in (' . implode(',', $grade_2_fids) .')';
    同样的方法,得到第三级数据
      

  4.   

    麻不麻烦其实是思路问题这种写法,只要读数据完成后,后面用
    ■FilterIterator
    ■ArrayIterator 
    ■RegexIterator 
    等等去做查询,其实也就几行代码,正则迭代器估计最多五行就能查到任意一个数据另一种思路是输出为xml树,然后用xpath查找这个问题包含三个步骤:读数据、转换数据形式、数据再利用
    递归是把前两个步骤简单化,在再利用的步骤上下功夫
    我是把中间步骤上下功夫,把再利用简单化
    还有一种思路就是读数据下功夫,转换、再利用简单化,但这种思路基本上处于现行硬件的困扰而摒弃——
    如果硬件足够强,完全可以SQL搞定
    人类的发展其实是个什么概念?说简单点就是不断的把物质的一种形态转换为另一种形态以符合自身需要,并不断寻求新的转换形式编程又是个什么概念?其实就是把数据从一种表现方式转换为另一种表现方式以符合自身需求
    (是否)麻烦归根到底是(是否)符合自身需求的问题而已
    我只是表达一种思路,你觉得不合适就继续开发新思路就行了,毕竟我不是你,不能完全满足你的数据表达形式需求的