Imagen que está creando un esquema de base de datos para un tablero de discusión enhebrado. ¿Hay una manera eficiente de seleccionar una lista ordenada correctamente para un hilo dado? El código que he escrito funciona pero no se ordena de la manera que me gustaría.SQL CTE recurrentes y ordenación de clasificación personalizada
Digamos que usted tiene estos datos:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
Así que la estructura se supone que debe tener este aspecto:
1 |- 2 | |- 3 | | |- 5 |- 4
Lo ideal sería que en el código, queremos que el conjunto de resultados a aparecer en el siguiente orden: 1, 2, 3, 5, 4
PROBLEMA: Con el CTE escribí que en realidad está siendo devuelto como: 1, 2, 4, 3, 5
Sé que esto sería fácil de agrupar/ordenar mediante el uso de LINQ, pero soy reacio a hacer esto en la memoria. Parece que la mejor solución en este punto, sin embargo ...
Aquí está el CTE actualmente estoy 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
Cualquier ayuda se agradece; ¡Gracias!
Soy nuevo en SQL y no había oído hablar antes del tipo de datos hierarchyid. Después de leer al respecto desde this comment, decidí que podría querer incorporar esto en mi diseño. Voy a experimentar con esto esta noche y publicar más información si tengo éxito.
actualización
resultado devuelto de mis datos de la muestra, utilizando la sugerencia 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
los dioses sql crecen indignados de sus reclamos – Shawn