【问题标题】:Hierarchical Category sorting with subCategory's ID使用 subCategory 的 ID 进行分层类别排序
【发布时间】:2013-05-03 23:48:00
【问题描述】:

我对 mssql 中的分层类别排序有疑问。我有 sql 代码在以下代码段中列出类别及其级别。

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

但我想显示子类别的父母。例如:电视>>智能>>液晶电视

我该怎么做?

感谢国王的问候!

【问题讨论】:

    标签: sql-server hierarchy hierarchical-data


    【解决方案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
    

    要将路径显示为网页上的链接,您需要同时显示类别名称和链接中使用的相应 ID。一个简单的分隔符,允许您使用字符串拆分功能,例如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 的所有代码添加到查询中,但这不是它所属的地方。

    【讨论】:

    • 我如何在 asp.net 中输入链接。它工作得很好,但是当我想在 asp.net 页面中显示它时,它给了我字符串以及如何在路径列中给出每个类别的链接?谢谢
    • @KaanKılıç - 更新了答案以显示如何处理类别名称和 id 以构建链接。
    • 谢谢先生。King 的回答很好。它对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多