呵呵 ,对于高手应该不简单的拉,最近项目遇到个这样的树型结构的查询 ,特来请教高手业务背景描述:有会员管理系统中:会员是成树状的结构,就有 一个会员下面有0个到n个会员,会员是分层次的一层一层往下增加,比如: 会员1 下有会员2,会员3,会员4……会员n ,会员2 下又哟会员5,会员6,……会员n ;会员3下又有会员7,会员8……会员n; 会员5下又有会员9,会员10,……会员N ; 设计表结构如下user( 会员ID,上级会员ID ,上上级会员ID),增加会员的时候要求必须输入上级会员ID ,上上级会员ID(两中关系的会员利润不一样,这里先不考虑这个)。 问题1:要求根据任何一个会员的会员id 查询出该会员下面的所有会员,要求体 现出会员之间的结构层次。
问题2:要求根据新增加的会员ID查询出他上面的所有会员.
说了这么多如果高手还有不明白的可以随时问,在先等待。
问题2:要求根据新增加的会员ID查询出他上面的所有会员.
说了这么多如果高手还有不明白的可以随时问,在先等待。
--下级查询
@hybh int
as
create table #xjcx (
hybh int, --会员编号
sjbh int, --上级会员编号
jb int --级别)declare @jb int
select @jb=0
--先把会员本身的记录添加进去
insert into #xjcx select hybh,sjbh,@jb from user where hybh=@hybh
while @@rowcount>0
begin
select @jb=@jb+1
insert into #xjcx select hybh,sjbh,@jb from user where sjbh in (select hybh from #xjcx where jb=@jb-1)
end
select * from #xjcx
go--就这样就行了,查询上级的编号和这个类似,我就不再写了.
create function dbo.GetLevel(@id as int,@id1 as int)
returns varchar(500) as
begindeclare @parent int
declare @i varchar(500)
set @i=cast(@id1 as varchar)
set @parent=@id1
while @parent<>@id and @parent is not null
begin
select @parent=parent from table where id=@parent
set @i=@i + cast(@parent as varchar)
end
if @parent=@id
return @i
else
return '*'end--然后写一个查询
select space(len(dbo.getlevel(id,@id))) + cast(id as varchar)
from table
where dbo.getLevel(id,@id)<>'*'
order by dob.getlevel(id,@id)
set @i=cast(@parent as varchar)+ @i
select space(len(dbo.getlevel(@id,id))) + cast(id as varchar)
from table
where dbo.getLevel(@id,id)<>'*'
order by dob.getlevel(@id,id)