Image vous créez un schéma de base de données pour un forum de discussion. Existe-t-il un moyen efficace de sélectionner une liste triée correctement pour un thread donné? Le code que j'ai écrit fonctionne mais ne trie pas comme je le voudrais.CTE SQL récursif et ordre de tri personnalisé
Disons que vous avez ces données:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
Ainsi, la structure est censé ressembler à ceci:
1 |- 2 | |- 3 | | |- 5 |- 4
Idéalement, dans le code, nous voulons que le jeu de résultats à apparaître dans la ordre suivant: 1, 2, 3, 5, 4
PROBLÈME: Avec le CTE je l'ai écrit est effectivement retourné comme: 1, 2, 4, 3, 5
Je sais que ce serait facile à grouper/commander en utilisant LINQ mais je suis réticent à le faire en mémoire. Il semble que la meilleure solution à ce stade si ...
est le CTE J'utilise actuellement ici:
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
Toute aide serait appréciée; Merci!
Je suis novice en SQL et je n'avais jamais entendu parler du type de données hierarchyid auparavant. Après avoir lu à ce sujet de this comment j'ai décidé que je pourrais vouloir l'incorporer dans mon dessin. Je vais expérimenter ce soir et poster plus d'informations si j'ai du succès.
Mise à jour
Résultat obtenu de mes données d'échantillons, en utilisant la suggestion de 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
les dieux sql s'indignent de vos revendications – Shawn