ホームページ >データベース >mysql チュートリアル >SQL クエリを使用したページングのスキップ アンド テイク機能を実装するにはどうすればよいですか?

SQL クエリを使用したページングのスキップ アンド テイク機能を実装するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-10 21:11:46175ブラウズ

How to Implement Skip and Take Functionality for Paging with SQL Queries?

SQL クエリ ページング: スキップ関数と取得関数を実装します

SQL でカスタム ページネーションを実装し、大規模なデータセットから特定の数のレコードを取得するには、skip 関数と get 関数を使用する必要があります。以下は、SQL クエリを使用してこれを実現する方法を示しています。

クエリステートメント

フォーラムのエントリを含むテーブルから PostId を取得し、PostId でグループ化し、投稿ごとの最大 DateMade で並べ替えるクエリがあります。このクエリは正常に機能しますが、ページネーション機能を追加する必要があります。

解決策

SQL Server 2012 以降の場合

SQL Server 2012 以降では、OFFSET 句と FETCH NEXT 句を使用してレコードを簡単にスキップして取得できるようになりました。変更されたクエリは次のようになります:

<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>

SQL Server 2008 の場合

SQL Server 2008 では、ROW_NUMBER() を使用して各レコードにシーケンス番号を割り当て、フィルターを適用して必要なレコードを選択できます。変更されたクエリは次のとおりです:

<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 > @Start AND RowNumber <= @End;</code>

以上がSQL クエリを使用したページングのスキップ アンド テイク機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。