如T,,表结构:
id file_name parent_id
--------------------------------
556 根目录 null
557 一级目录 556
558 二级目录 557
559 三级目录 558先是
MySQL的存储过程,怎么实现查询556下的所有目录?要用到递归么?临时表?还有一个插入的存储过程,刚学存储过程,一知半解中,,,,,
id file_name parent_id
--------------------------------
556 根目录 null
557 一级目录 556
558 二级目录 557
559 三级目录 558先是
MySQL的存储过程,怎么实现查询556下的所有目录?要用到递归么?临时表?还有一个插入的存储过程,刚学存储过程,一知半解中,,,,,
用程序先得出结果然后添加到这个字段里面。单纯用SQL效率不敢保证!
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,随便你了。
明白了吗?循环的次数取决于你的根目录下面最大的子的层数,与该层子的数量无关。