如T,,表结构:    
id       file_name      parent_id
--------------------------------
556      根目录           null
557      一级目录         556
558      二级目录     557
559      三级目录         558先是
MySQL的存储过程,怎么实现查询556下的所有目录?要用到递归么?临时表?还有一个插入的存储过程,刚学存储过程,一知半解中,,,,,

解决方案 »

  1.   

    我建议你新建一个字段。
    用程序先得出结果然后添加到这个字段里面。单纯用SQL效率不敢保证!
      

  2.   

    新建一个parentids字段,该字段储存该分类的所有子分类的id
      

  3.   

    我给你出个主意,不用递归,效率太慢。就用循环吧,速度应该还可以。
    1、如果 id 不是主键的话,在id上建索引。
    2、在 parent_id 上建索引。
    sql:
    你已经知道了 父目录 的id 。
    allid = 父目录 的id 。(在你的说明里,父目录代表你的跟目录,其实也可以代表一级目录,二级目录等)
    tempid = 空 ,初始要赋给空值
    //用 whlie循环while(allid != tempid) //判断部分你看着改。大概就是比较他们两个是不是相同,不同的话,就再次进入循环。
      tempid = allid
      select id from T where parent_id in (allid) or id in (allid);
      allid = 上述sql查询出来的 所有的id。
    end whileallid 里面的,就是你所有的,然后再用一条sql取出来就行了。也可以用上面的sql,随便你了。
    明白了吗?循环的次数取决于你的根目录下面最大的子的层数,与该层子的数量无关。