Многоуровневые вложенные категории продуктов отображаются с asp.net и sql server? - PullRequest
0 голосов
/ 09 июня 2010

У меня есть таблица категорий товаров со следующими полями:

cat_id (PK)

cat_name

Cat_desc

Parent_Cat_Id

Теперь, когда пользователь хочет добавить товар, он должен иметь возможность выбрать несколько категорий из списка (множественный выбор включен). Но чтобы пользователь знал иерархию категорий, мне нужно отобразить их в следующем стиле:

родительская категория 1

родительская категория 1-> подкатегория 1

родительская категория 1-> подкатегория 1-> подкатегория 1

родительская категория 1-> подкатегория 1-> подкатегория 2

родительская категория 1-> подкатегория 2

Родительская категория 2

...

Я знаю, что для этого мне нужно использовать рекурсивное программирование. Но как мы можем сделать это с помощью хранимых процедур? Это было бы намного эффективнее, верно?

Заранее благодарим за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 16 июня 2010

Вот что ты хочешь.Эта хранимая процедура использует "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

На самом деле, если вы измените последний выбор на "selct * from tree", вы получите больше данных об иерархии.

Вот ссылка нахороший ресурс для CTE

0 голосов
/ 09 июня 2010

Вы используете Linq?

Если вы используете LINQ, я бы предложил добавить новое свойство, которое просто представляет категорию со всеми родительскими категориями, и использовать там рекурсию, так что вам будет легко получить к ней доступ в asp.net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...