Obraz, który tworzysz, jest schematem DB dla nagłownego forum dyskusyjnego. Czy istnieje skuteczny sposób wyboru prawidłowo posortowanej listy dla danego wątku? Kod, który napisałem, działa, ale nie sortuje tak, jakbym chciał.Rekurencyjne zapytania SQL CTE i niestandardowe sortowanie sortów
Powiedzmy masz te dane:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
więc struktura ma wyglądać następująco:
1 |- 2 | |- 3 | | |- 5 |- 4
Idealnie, w kodzie, chcemy wynik pojawiać się w następująca kolejność: 1, 2, 3, 5, 4
PROBLEM: Za pomocą CTE napisałem, że jest on zwracany jako: 1, 2, 4, 3, 5
Wiem, że łatwo byłoby pogrupować/zamówić za pomocą LINQ, ale niechętnie robię to w pamięci. Wydaje się, że najlepszym rozwiązaniem w tym momencie mimo ...
Oto CTE Obecnie używam:
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
Każda pomoc będzie mile widziane; Dzięki!
Jestem nowy w SQL i wcześniej nie słyszałem o typie danych hierarchyid. Po przeczytaniu o nim z this comment zdecydowałem, że mogę włączyć to do mojego projektu. Będę eksperymentować z tym wieczorem i opublikuję więcej informacji, jeśli osiągnę sukces.
Aktualizacja
Zwracany wynik z moich przykładowych danych, stosując sugestię dance2die za:
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
bogowie sq wyrosli oburzeni z twoich roszczeń – Shawn