Изображение Вы создаете схему БД для многопоточной дискуссионной панели. Есть ли эффективный способ выбора правильно отсортированного списка для данного потока? Код, который я написал, работает, но не сортирует так, как мне бы хотелось.Рекурсивный SQL CTE и пользовательское упорядочение сортировки
Допустим, у вас есть эти данные:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
Так структура должна выглядеть следующим образом:
1 |- 2 | |- 3 | | |- 5 |- 4
В идеале, в коде, мы хотим, чтобы результирующий набор появится в следующий порядок: 1, 2, 3, 5, 4
ПРОБЛЕМЫ: с СТ я написал это на самом деле возвращается как: 1, 2, 4, 3, 5
Я знаю, что это было бы легко сгруппировать/заказать с помощью LINQ, но я неохотно делаю это в памяти. Похоже, что лучшим решением в этой точке, хотя ...
Здесь КТР настоящее время я использую:
with Replies as (
select c.CommentID, c.ParentCommentID 1 as Level
from Comment c
where ParentCommentID is null and CommentID = @ParentCommentID
union all
select c.CommentID, c.ParentCommentID, r.Level + 1 as Level
from Comment c
inner join Replies r on c.ParentCommentID = r.CommentID
)
select * from Replies
Любая помощь будет оценена; Благодаря!
Я новичок в SQL и раньше не слышал об иерархическом типе данных. Прочитав об этом от this comment, я решил, что могу включить это в свой дизайн. Я буду экспериментировать с этим сегодня вечером и опубликовать дополнительную информацию, если у меня будет успех.
Update
Возвращается результат из моих выборочных данных, используя предложение dance2die в:
ID | ParentID | Level | DenseRank ------------------------------------- 15 NULL 1 1 20 15 2 1 21 20 3 1 17 22 3 1 22 15 2 2 31 15 2 3 32 15 2 4 33 15 2 5 34 15 2 6 35 15 2 7 36 15 2 8
боги sql возмущены вашими требованиями – Shawn