Heim >Datenbank >MySQL-Tutorial >Wie implementiert man die Skip-and-Take-Funktionalität für Paging mit SQL-Abfragen?

Wie implementiert man die Skip-and-Take-Funktionalität für Paging mit SQL-Abfragen?

DDD
DDDOriginal
2025-01-10 21:11:46173Durchsuche

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

SQL-Abfrage-Paging: Skip- und Get-Funktionen implementieren

Um benutzerdefinierte Paginierung in SQL zu implementieren und eine bestimmte Anzahl von Datensätzen aus einem großen Datensatz abzurufen, müssen Sie Skip- und Get-Funktionen verwenden. Nachfolgend finden Sie eine Demonstration, wie Sie dies mithilfe von SQL-Abfragen erreichen können.

Abfrageanweisung

Sie haben eine Abfrage, die die PostId aus einer Tabelle mit Forumseinträgen abruft, die nach PostId gruppiert und nach dem maximalen Erstellungsdatum pro Beitrag sortiert sind. Diese Abfrage funktioniert einwandfrei, Sie möchten ihr jedoch eine Paginierungsfunktion hinzufügen.

Lösung

Für SQL Server 2012 und höher

Ab SQL Server 2012 können Sie mithilfe der Klauseln OFFSET und FETCH NEXT ganz einfach Datensätze überspringen und abrufen. Die geänderte Abfrage sieht folgendermaßen aus:

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

Für SQL Server 2008

In SQL Server 2008 können Sie ROW_NUMBER() verwenden, um jedem Datensatz eine Sequenznummer zuzuweisen und dann einen Filter anzuwenden, um die erforderlichen Datensätze auszuwählen. Hier ist die geänderte Abfrage:

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

Das obige ist der detaillierte Inhalt vonWie implementiert man die Skip-and-Take-Funktionalität für Paging mit SQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn