CrazyFor (蚂蚁) 
这种致富不忘穷兄弟的做法值得鼓励!

解决方案 »

  1.   

    CABO(白椒腊肉) 呵呵~~~多谢!
      

  2.   

    http://expert.csdn.net/Expert/TopicView2.asp?id=962569&datebasetype=nowBuildRelation:(555,里面几个递归来重建ItemsRelation,但是我的网站进不去了。。)
    http://www.lostinet.com/temp/ItemsRelation.sql
      

  3.   

    请问,您这里有没有关于树图结构如何显示的方法或者例子,我曾经贴过一贴,可是无人响应,您这里提的存储和查询方法都不错,值得学习、研究。树图对我来说,现在是个非常头疼的问题,特别是关于树图的显示上,我们采用的是js代码编的,无论是显示的速度上,还是使用上都达不到要求,现向您提出援助,如果有这方面的信息,还望能和我联系([email protected]),非常感谢。
      

  4.   

    springgwn() 你是用在什么地方?应该程序中吗?
      

  5.   

    我用在web程序中,需要在网页上显示,希望能得到您的帮助!
      

  6.   

    这个问题我也想过好久,要不把数据写入XML中再处理,要不然就是用JS来做,还有就是点一个加号就刷新一下窗体。
      

  7.   

    create table new_tree  ( parent varchar(80), child varchar(80),weight int)
    go
    insert new_tree values ( '1','2',3);
    insert new_tree values ( '1','3',4);
    insert new_tree values ( '2','4',3);
    insert new_tree values ( '2','5',5);
    insert new_tree values ( '3','6',7);
    insert new_tree values ( '3','7',3);
    insert new_tree values ( '3','8',2);
    insert new_tree values ( '6','9',1);
    insert new_tree values ( '5','10',4);
    insert new_tree values ( '4','11',3);
    insert new_tree values ( '9','12',7);
    insert new_tree values ( '7',NULL,1);
    insert new_tree values ( '8',NULL,4);
    insert new_tree values ( '10',NULL,3);
    insert new_tree values ( '11',NULL,3);
    insert new_tree values ( '12',NULL,7);广度优先:
    create proc proc_new_tree (@parent varchar(80),@mode int =0)
    asbegin
      set nocount on
      declare @level int  
      declare @tmp1  table ( parent varchar(80), child varchar(80),level int)
      select @level =1
      insert @tmp1 select parent,child,@level from new_tree where parent = @parent
      while exists(select * from @tmp1 where child is not NULL and level=@level)
      begin
        insert @tmp1 select a.parent,a.child ,@level+1  from new_tree a,@tmp1 b where a.parent = b.child and b.level=@level
        select @level=@level +1
      end
      if @mode =0 select * from @tmp1
      else select * from @tmp1 where child is null
      set nocount off
    end
    go深度优先:
    create proc proc__tree (@parent char(20))
     as
    begin
      set nocount on
      declare @level int ,@i int ,@flag int
      declare @stack table (parent char(20),child char(20),level int,row int , flag int)
      select @level = 1,@i=1,@flag=1
      insert @stack select parent,child, @level,0,1 from   new_tree  where parent = @parent and child is not null
      
      while @level > 0
      begin
        if exists (select * from @stack where level = @level and flag=1)
        begin
           select @parent = min(child) from @stack  where level = @level and flag=1
           update @stack set flag =0 , row=@i where level = @level and child = @parent and  flag =1
           select @i = @i +1
           insert @stack select parent,child, @level + 1,0,1 from   new_tree  where parent = @parent and child is not null
           if @@rowcount > 0
              select @level = @level + 1
        end
        else
        begin
          select @level = @level - 1
        end
      end 
      select row,parent ,child,level from @stack order by row
      set nocount off
    end
    go
    proc__tree '1'
      

  8.   

    ---按照树顺序排序方法
    select *,dbo.fn_32gettopclass(Tc_id,default,1,default) from treeclass order by dbo.fn_32gettopclass(Tc_id,default,1,default)
      

  9.   

    更新:CREATE FUNCTION FN_32GetTopClass (@InputId int,@IdStr varchar(8000)='',@type int=0,@LevelCount int=-1)  
    /*
    @Type= 0:得到顶层ID
    1:得到当前到顶层的串
    2:排序时使用
    */RETURNS Varchar(8000)
     AS  
    BEGIN Declare @TC_ID int,@TC_PID int,@StartLevel int,@Id32 int,@OrderStr varchar(10)
    if @LevelCount=-1
    begin
    set @StartLevel=@@NESTLEVEL
    set @LevelCount=@StartLevel
    end
    else 
    set @StartLevel=-1DECLARE TreeClass CURSOR local FOR 
    SELECT TC_Id,TC_PID
    FROM TreeClass
    where TC_ID=@InputIdOPEN TreeClass
    FETCH NEXT FROM TreeClass
    INTO @TC_ID,@TC_PIDWHILE @@FETCH_STATUS = 0
    BEGIN if @type=1 or @type=2
    begin
    if @type=2 set @OrderStr='0000000000' else set @OrderStr=''
    if @IdStr<>'' select @IdStr=','+@IdStr
    select @IdStr=''''+right(@OrderStr+cast(@tC_ID as varchar),10)+''''+@IdStr
    end
    else
    if @TC_PID=0 select @IdStr=cast(@tC_ID as varchar) if @@NESTLEVEL<32
    select @IdStr=dbo.FN_32GetTopClass (@TC_PID,@IdStr,@type,@LevelCount)
    else
    set @IdStr=@IdStr+'['+cast(@tC_ID as varchar)+']'
    FETCH NEXT FROM TreeClass
    INTO @tC_ID,@TC_PIDEndCLOSE TreeClass
    DEALLOCATE TreeClasswhile @StartLevel=@@NESTLEVEL and charindex(']',@IdStr)>0
    begin
    set @Id32=substring(@IdStr,charindex('[',@Idstr)+1,charindex(']',@IdStr)-1-charindex('[',@Idstr))
    set @IdStr=dbo.FN_32GetTopClass (@Id32,@IdStr,@type,@LevelCount)
    set @IdStr=replace(@IdStr,'['+cast(@Id32 as varchar)+']','')
    endReturn @IdStrEND