Image Sie erstellen ein DB-Schema für eine Diskussionsrunde mit Threads. Gibt es eine effiziente Möglichkeit, eine korrekt sortierte Liste für einen bestimmten Thread auszuwählen? Der Code, den ich geschrieben habe, funktioniert, aber sortiert nicht so, wie ich es auch möchte.Rekursive SQL-CTEs und benutzerdefinierte Sortierreihenfolge
Angenommen, Sie haben diese Daten haben:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
So ist die Struktur soll wie folgt aussehen:
1 |- 2 | |- 3 | | |- 5 |- 4
Idealerweise in dem Code, wir die Ergebnismenge angezeigt werden soll in der Reihenfolge: 1, 2, 3, 5, 4
PROBLEM: Mit dem CTE ich es tatsächlich geschrieben wird zurückgegeben, wie: 1, 2, 4, 3, 5
Ich weiß, das wäre einfach zu gruppieren/bestellen mit LINQ, aber ich bin ungern, dies im Speicher zu tun. Es scheint die beste Lösung an dieser Stelle aber ...
Hier ist der CTE Ich bin derzeit mit:
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
Jede Hilfe würde geschätzt; Vielen Dank!
Ich bin neu in SQL und hatte noch nicht von hierarchyid Datentyp gehört. Nachdem ich es von this comment gelesen habe, entschied ich, dass ich das in mein Design integrieren möchte. Ich werde heute Abend damit experimentieren und weitere Informationen veröffentlichen, wenn ich Erfolg habe.
aktualisieren
Erhaltenes Ergebnis aus meiner Beispieldaten, dance2die Vorschlag mit:
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
die sql Götter wachsen entrüstet von Ihren Ansprüchen – Shawn