immagine che si sta creando uno schema DB per un forum di discussione filettata. C'è un modo efficace per selezionare una lista ordinata correttamente per un determinato thread? Il codice che ho scritto funziona ma non ordina come vorrei.ricorsiva SQL CTE e Ordinamento personalizzato per l'ordine
Diciamo che avete questi dati:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
Quindi la struttura dovrebbe assomigliare a questo:
1 |- 2 | |- 3 | | |- 5 |- 4
Idealmente, nel codice, vogliamo che il set di risultati da visualizzare nel seguente ordine: 1, 2, 3, 5, 4
PROBLEMA: Con CTE ho scritta è effettivamente restituito come: 1, 2, 4, 3, 5
So che sarebbe facile raggruppare/ordinare usando LINQ ma sono riluttante a farlo in memoria. Sembra che la soluzione a questo punto però meglio ...
Ecco l'CTE Attualmente sto usando:
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
Qualsiasi aiuto sarebbe apprezzato; Grazie!
Sono nuovo di SQL e non avevano sentito parlare tipo di dati hierarchyid prima. Dopo aver letto su di esso da this comment ho deciso che potrei voler incorporare questo nel mio progetto. Sperimenterò con questo stasera e pubblicherò maggiori informazioni se avrò successo.
Aggiornamento
risultato restituito dai miei dati di esempio, utilizzando il suggerimento di 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
gli dei sql crescono indignati dalle tue affermazioni – Shawn