Изображение вы создаете схему БД для многопоточной доски обсуждений. Есть ли эффективный способ выбрать правильно отсортированный список для данного потока? Код, который я написал, работает, но не сортирует так, как мне бы хотелось.
Допустим, у вас есть эти данные:
ID | ParentID
-----------------
1 | null
2 | 1
3 | 2
4 | 1
5 | 3
Итак, структура должна выглядеть следующим образом:
1
|- 2
| |- 3
| | |- 5
|- 4
В идеале в коде мы хотим, чтобы набор результатов отображался в следующем порядке: 1, 2, 3, 5, 4
ПРОБЛЕМА: С CTE, который я написал, на самом деле возвращается: 1, 2, 4, 3, 5
Я знаю, что это будет легко сгруппировать / упорядочить с помощью LINQ, но я не хочу делать это в памяти. Похоже, что лучшее решение на данный момент ...
Вот CTE, которым я сейчас пользуюсь:
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 и раньше не слышал о типе иерархии. Прочитав об этом из
этого комментария , я решил включить это в свой дизайн. Я поэкспериментирую с этим вечером и опубликую больше информации, если у меня будет успех.
<ч />
Обновление
Возвращенный результат из моих выборочных данных, используя предложение 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