www.csdn.net论坛中的树型是怎么通过数据库读出生成树的?比如表是如下:
biao 
id    groupID
12     23
23     25
25     58
11     null
2      null
12     11
表中当GROUPID为空的时候为根节点,不为空的时候递归查询ID,直到没有匹配为止。再把读出的数据生成如论坛的树型结构。谢谢!!!急!

解决方案 »

  1.   

    比如用开发工具做2个函数,1个返回根节点,另一个返回某个节点的子节点。
    根节点函数:
    select * from biao where groupID is null or groupid=''
    子节点函数:
    select * from biao where groupID=parentID
      

  2.   

    -老大的方法--测试数据
    CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
    INSERT tb SELECT '001',NULL ,'山东省'
    UNION ALL SELECT '002','001','烟台市'
    UNION ALL SELECT '004','002','招远市'
    UNION ALL SELECT '003','001','青岛市'
    UNION ALL SELECT '005',NULL ,'四会市'
    UNION ALL SELECT '006','005','清远市'
    UNION ALL SELECT '007','006','小分市'
    GO--查询指定节点及其所有子节点的函数
    CREATE FUNCTION f_Cid(@ID char(3))
    RETURNS @t_Level TABLE(ID char(3),Level int)
    AS
    BEGIN
    DECLARE @Level int
    SET @Level=1
    INSERT @t_Level SELECT @ID,@Level
    WHILE @@ROWCOUNT>0
    BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level
    FROM tb a,@t_Level b
    WHERE a.PID=b.ID
    AND b.Level=@Level-1
    END
    RETURN
    END
    GO--调用函数查询002及其所有子节点
    SELECT a.*
    FROM tb a,f_Cid('002') b
    WHERE a.ID=b.ID
    /*--结果
    ID   PID  Name       
    ------ ------- ---------- 
    002  001  烟台市
    004  002  招远市
    --*/