【问题标题】:Multilevel nested product categories display with asp.net and sql server?多级嵌套产品类别显示与 asp.net 和 sql server?
【发布时间】:2011-03-01 13:35:27
【问题描述】:

我有一个包含以下字段的产品类别表:

cat_id (PK)

猫名

Cat_desc

Parent_Cat_Id

现在,当用户想要添加产品时,他应该能够从列表框中选择多个类别(启用多选)。但是为了让用户知道类别的层次结构,我需要以如下样式显示它们:

父类 1

父类 1->子类 1

父类1->子类1->子子类1

父类1->子类1->子子类2

父类 1->子类 2

父类 2

...

我知道要实现这一点,我需要使用递归编程。但是我们如何通过存储过程来做到这一点呢?这样会更有效率,对吧?

提前感谢您的帮助。

【问题讨论】:

    标签: asp.net sql-server stored-procedures parent-child


    【解决方案1】:

    这就是你想要的。此存储过程使用“CTE”或“公用表表达式”。我不是他们的专家,但他们非常有用。绝对建议查找它们。

    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE GetRecursiveTest
    AS
    BEGIN
        ;WITh Tree (cat_id, cat_name, parent_cat_id, level, Sort) AS
        (
            SELECT cat_id, cat_name, parent_cat_id, 0 AS level, 
                CONVERT(varchar(255), cat_name) AS Sort 
            FROM RecursiveTest
            WHERE parent_cat_id = 0
    
            UNION ALL
    
        SELECT RT.cat_id, RT.cat_name, RT.parent_cat_id, Parent.level + 1 AS level, 
            CONVERT(varchar(255), Parent.Sort + ' -> ' + RT.cat_name) AS Sort
            FROM RecursiveTest RT
            INNER JOIN Tree as Parent ON Parent.cat_id = RT.parent_cat_id
        )
    
        SELECT Sort FROM Tree
        ORDER BY Sort
    END
    GO
    

    实际上,如果您将最后一个选择更改为“从树中选择 *”,您将获得有关层次结构的更多数据。

    这是CTE's的好资源的链接

    【讨论】:

    • 太棒了!了解 CTE,但不知道如何实施它们来解决这个问题。太棒了,我的朋友 :-)
    【解决方案2】:

    你在使用 Linq 吗?

    如果您使用 LINQ,我建议添加一个新属性,该属性仅代表具有所有父类别的类别并在那里使用递归,因此您可以轻松地在 asp.net 中访问它

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2014-04-15
    • 2012-09-15
    相关资源
    最近更新 更多