スレッド化された掲示板用の DB スキーマを作成している画像。特定のスレッドに対して適切にソートされたリストを選択する効率的な方法はありますか? 私が書いたコードは動作しますが、私が望むようにはソートされません。
次のデータがあるとします。
ID | 親ID ----------------- 1 | ヌル 2 | 1 3 | 2 4 | 1 5 | 3
したがって、構造は次のようになります。
1 |- 2 | | |- 3 | | | | |- 5 |- 4
理想的には、コードでは、結果セットが次の順序で表示されるようにします: 1, 2, 3, 5, 4
問題:私が書いた CTE では、実際には1, 2, 4, 3, 5として返されます。
これは LINQ を使用して簡単にグループ化/順序付けできることはわかっていますが、これをメモリ内で行うのは気が進まないのです。現時点ではそれが最善の解決策のように思えますが...
現在使用しているCTEは次のとおりです。
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
助けていただければ幸いです。ありがとう!
私は SQL が初めてで、hierarchyid データ型について聞いたことがありません。このコメントからそれについて読んだ後、これを自分のデザインに取り入れたいと思うかもしれません. 今夜これを試して、成功した場合はさらに情報を投稿します.
dance2die の提案を使用して、サンプル データから返された結果を更新します。
ID | 親 ID | レベル | 密なランク -------------------------------------- 15 ヌル 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