按id和parentid给记录分级

生活中有很多东西是有级别的,比如树的分支,它可以有自己的父节点也可以有子节点。

创建文件夹的时候,可以在其中创建子文件夹,子文件夹有可以创建子文件夹。。。

像这一类事物都可以不断的分下去,但是在一些业务开发中却需要对此进行分级。

例如:有

---------------------------------------------

   1级目录a

         2级目录c

               3级目录d

                     4级目录e

   1级目录b

----------------------------------------------  

        

当要求找出层次小于三的目录时,你就需要根据目录间的关系一层层的数到第第三层为目录d,那么在它之前的目录都是 目录a、目录c、目录d、目录b

这时你可以清晰的从上面的图中找出来,但是实际项目中数据都不可能这样很有层次的列出来,用这么多空格是很浪费存储空间的,

一般都是如下图存储在数据库中的,一眼望下去并不能很快的找得到,况且数据量大的情况下就更麻烦,那么问题来了怎样快速找到指定级别目录呢?

Directory表

这里利用临时表写了个存储过程

--创建存储过程
create proc myproc
	@level int
as
--创建临时表 
create table #tmp_table(id int,level int)
declare @levelvalue int
set @levelvalue=0
insert #tmp_table select 0,@levelvalue
--将数据写入到临时表 
while @@ROWCOUNT>0
begin
	set @levelvalue=@levelvalue+1
	insert #tmp_table select a.DirectoryID,@levelvalue
	from Directory as a,#tmp_table as b
	where a.DirectoryParentID=b.id and b.level=@levelvalue-1  
end

select a.*
from Directory as a join #tmp_table as b on a.DirectoryID=b.id
where b.level>0 and b.level<=@level

go

执行存储过程传入参数3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值