0

2 つのテーブルがあり、最初のテーブルには投稿が含まれ、2 つ目のテーブルには投稿のコメントが含まれています

Posts
-------
[ID] int
{Text] nvarchar(max)
.... (some other columns...)

Comments
--------
[ID] int
[PostID] int
[Comment] Nvarchar(1024)
.... (some other columns)

上位 20 件の投稿と各投稿の上位 10 件のコメントを読み込みたい。問題は、自分のページに投稿を表示するときに、投稿後に各投稿のコメントが必要なことです。

助言がありますか?

4

2 に答える 2

1

これにより、1 回の旅行で必要なすべてのデータを取得できます。コマンドDataAdapter.Fillは次のようになります。

SELECT TOP 20 * FROM Posts WHERE ...

次に、同じコマンドで、セミコロンで区切られた;2 番目の SQL を指定します。これにより、2 番目のテーブルが に追加されますDataSet

SELECT * 
FROM 
    (SELECT 
         *, 
         ROW_NUMBER() OVER(PARTITION BY PostID ORDER BY ID desc) RowNum 
     FROM 
         Comments 
     WHERE 
         PostID IN (SELECT TOP 20 ID FROM Posts WHERE ...)
    ) tmp 
WHERE 
    RowNum <= 10

この SQL は、上記で要求したすべての投稿のコメントを取得しますが、PostID ごとに最後の 10 件のみを取得します。

ご了承ください

SELECT TOP 20 ID FROM Posts WHERE ...

単一の戻りフィールドが ID 列であることを除いて、最初の SQL ステートメントからの正確な SQL である必要があります。

データセットを入力したら、後で使用できるように保存します。これにより、レコードが変更されたとき ([投稿] を選択)、コメント用に既にローカルにあるデータを取得できます。

これはVBで申し訳ありません

Dim DRs as Datarow() = {Your Dataset}.Tables(1).Select("PostID = " & {The current records ID})

お役に立てれば。少なくとも正しい方向に向けられるはずです。

于 2013-10-03T20:38:26.793 に答える