Hình ảnh bạn đang tạo lược đồ DB cho bảng thảo luận có chuỗi. Có cách nào hiệu quả để chọn danh sách được sắp xếp đúng cho một chuỗi nhất định không? Mã tôi đã viết nhưng không phân loại theo cách tôi muốn.Sắp xếp thứ tự SQL CTE và Thứ tự sắp xếp tùy chỉnh
Hãy nói rằng bạn có dữ liệu này:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
Vì vậy, cấu trúc có nghĩa vụ phải trông như thế này:
1 |- 2 | |- 3 | | |- 5 |- 4
Lý tưởng nhất, trong các mã, chúng tôi muốn tập hợp kết quả xuất hiện trong theo thứ tự sau: 1, 2, 3, 5, 4
VẤN ĐỀ: Với CTE tôi đã viết nó thực sự được trả lại là: 1, 2, 4, 3, 5
Tôi biết điều này sẽ dễ dàng nhóm/đặt hàng bằng cách sử dụng LINQ nhưng tôi không muốn làm điều này trong bộ nhớ. Nó có vẻ như giải pháp tốt nhất vào thời điểm này mặc dù ...
Dưới đây là CTE Tôi hiện đang sử dụng:
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
Bất kỳ trợ giúp sẽ được đánh giá cao; Cảm ơn!
Tôi mới sử dụng SQL và chưa từng nghe về kiểu dữ liệu phân cấp trước đó. Sau khi đọc về nó từ this comment Tôi quyết định tôi có thể muốn kết hợp điều này vào thiết kế của tôi. Tôi sẽ thử nghiệm với điều này tối nay và đăng thêm thông tin nếu tôi có thành công.
Cập nhật
Returned kết quả từ dữ liệu mẫu của tôi, sử dụng gợi ý dance2die của:
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
các vị thần sql trở nên phẫn nộ từ yêu cầu của bạn – Shawn