あなたは、各投稿の最新のエントリに基づいて、最近議論されたフォーラムの投稿を取得するクエリを処理しています。このクエリを拡張してページネーションをサポートし、特にユーザーが「最近アクティブな 10 番目から 20 番目の投稿」などの特定の範囲の投稿を取得できるようにしたいと考えています。
SQL Server 2012 以降
SQL Server 2012 以降では、OFFSET キーワードと FETCH キーワードを使用してページングを簡単に実装できます。
<code class="language-sql">SELECT PostId FROM ( SELECT PostId, MAX(Datemade) AS LastDate FROM dbForumEntry GROUP BY PostId ) SubQueryAlias ORDER BY LastDate DESC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;</code>
このクエリは、最初の 10 行 (オフセット) をスキップし、次の 10 行を取得します。
SQL Server 2008
SQL Server 2008 では、次の手法を使用できます。
<code class="language-sql">DECLARE @Start INT DECLARE @End INT SELECT @Start = 10, @End = 20; WITH PostCTE AS ( SELECT PostId, MAX(Datemade) AS LastDate ,ROW_NUMBER() OVER (ORDER BY PostId) AS RowNumber FROM dbForumEntry GROUP BY PostId ) SELECT PostId, LastDate FROM PostCTE WHERE RowNumber BETWEEN @Start + 1 AND @End ORDER BY RowNumber;</code>
このクエリは、共通テーブル式 (CTE) を使用して各投稿の行番号を生成します。次に、WHERE 句によって結果がフィルタリングされ、指定された範囲内の投稿のみが含まれます。また、ORDER BY 句によって、投稿が PostId の昇順で返されるようになります。
以上がSQL Server で OFFSET と FETCH または ROW_NUMBER を使用してページネーションを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。