2013-05-03 4 views
0

У меня проблема с сортировкой иерархической категории в mssql.I есть код 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

Но я хочу, чтобы показать подкатегорию-х 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 

Чтобы отобразить путь, ссылки на веб-странице, вы хотите иметь как имена категорий для отображения и соответствующие идентификаторы для использования в ссылках. Простой разделитель, который позволяет вам использовать функцию разделения строк, например. 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 она дает мне строку и как я могу дать ссылку на каждую категорию в столбце пути? Спасибо –

+0

@ KaanKılıç - Обновлен ответ, чтобы показать, как обрабатывать имена категорий и идентификаторы для построения ссылок. – HABO

+0

Спасибо, sir.King приветствует хороший ответ. Он работал на меня. –

Смежные вопросы