2013-05-03 27 views
0

我对mssql中的分层类别排序有问题。我有sql代码在下面的代码段中列出了具有其级别的类别。使用子类别的ID进行分层分类排序

WITH TempCtgry (CtgryID, CtgryName, ParentCtgryId, Lvl)AS (SELECT CategoryID,CategoryName ,ParentCatID, 0 as Level FROM Category r WHERE r.ParentCatID IS NULL UNION ALL SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl+1 FROM Category r1 INNER JOIN TempCtgry on r1.ParentCatID= TempCtgry.CtgryID) SELECT * FROM TempCtgry

但我想告诉子类的实例parents.For:电视>>智能>>液晶电视

我怎么能这样做?

谢谢和国王的问候!

回答

1

建立起来,当您去,就像计数水平:

WITH TempCtgry (CtgryID, CtgryName, ParentCtgryId, Lvl) AS (
    SELECT CategoryID, CategoryName, ParentCatID, 0 as Level, 
    Convert(VarChar(1024), CategoryName) as Path 
    FROM Category r 
    WHERE r.ParentCatID IS NULL 
    UNION ALL 
    SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl + 1, 
    Convert(VarChar(1024), Path + ' >> ' + r1.CategoryName) as Path 
    FROM Category r1 INNER JOIN 
     TempCtgry on r1.ParentCatID = TempCtgry.CtgryID 
) 
    SELECT * 
    FROM TempCtgry 

要显示的路径为网页上的链接,你会希望有两个用于显示的类别名称和相应的IDS用于链接。一个简单的分隔符,允许您使用字符串分隔功能,例如this,简化了显示用代码:

WITH TempCtgry (CtgryID, CtgryName, ParentCtgryId, Lvl) AS (
    SELECT CategoryID, CategoryName, ParentCatID, 0 as Level, 
    Convert(VarChar(1024), CategoryName) as Path, 
    Convert(VarChar(1024), CategoryID) as PathIds 
    FROM Category r 
    WHERE r.ParentCatID IS NULL 
    UNION ALL 
    SELECT r1.CategoryID, r1.CategoryName, r1.ParentCatID, TempCtgry.Lvl + 1, 
    Convert(VarChar(1024), Path + '|' + r1.CategoryName) as Path, 
    Convert(VarChar(1024), PathIds + '|' + Convert(VarChar(9), CategoryId)) as PathIds 
    FROM Category r1 INNER JOIN 
     TempCtgry on r1.ParentCatID = TempCtgry.CtgryID 
) 
    SELECT * 
    FROM TempCtgry 

注意:这假定一个垂直条(“|”)不能在一个类别名字发生。

ASP.NET代码将需要拆分两个路径字符串,并一起创建链接。方便的显示分隔符是“»”(U + 00BB:右指向双角度引号)。

可以将所有代码添加到查询中以生成所需的HTML,但这不属于它的位置。

+0

我怎样才能进入链接在asp.net.It的工作良好,但是当我想表明,在asp.net页面它给了我的字符串,我怎么能链接到路径列中的每个cateogry?谢谢 – 2013-05-04 08:15:55

+0

@KaanKılıç - 更新的答案显示如何处理建筑物链接的类别名称和ID。 – HABO 2013-05-04 11:03:08

+0

谢谢先生。谨向你问好,这对我很有帮助。 – 2013-05-04 12:18:22

相关问题