Vous traitez une requête qui récupère les messages du forum récemment discutés en fonction de l'entrée la plus récente pour chaque message. Vous souhaitez étendre cette requête pour prendre en charge la pagination, en particulier pour permettre à l'utilisateur de récupérer une plage spécifique de publications, telle que « les 10e à 20e publications actives les plus récentes ».
SQL Server 2012 et supérieur
Dans SQL Server 2012 et versions ultérieures, vous pouvez facilement implémenter la pagination à l'aide des mots-clés OFFSET et 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>
Cette requête ignore les 10 premières lignes (décalage) et obtient les 10 lignes suivantes.
SQL Server 2008
Dans SQL Server 2008, vous pouvez utiliser les techniques suivantes :
<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>
Cette requête utilise une expression de table commune (CTE) pour générer des numéros de ligne pour chaque publication. La clause WHERE filtre ensuite les résultats pour inclure uniquement les publications dans la plage spécifiée, et la clause ORDER BY garantit que les publications sont renvoyées dans l'ordre croissant par PostId.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!