La pagination des données de base de données nécessite généralement de déterminer le nombre total de pages pour restituer le contrôle de pagination. En règle générale, cela nécessite l'exécution de deux requêtes distinctes : une utilisant COUNT() pour obtenir le total et une autre utilisant LIMIT pour récupérer les données de la page actuelle.
Cette méthode est inefficace. Heureusement, il existe un meilleur moyen dans PostgreSQL d'obtenir le total avant d'appliquer LIMIT : utiliser les fonctions de fenêtre.
Les fonctions de fenêtre introduites dans PostgreSQL 8.4 nous permettent d'effectuer des calculs sur un ensemble de données défini par une "fenêtre". En spécifiant une fenêtre appropriée, nous pouvons récupérer le total sans affecter l'opération LIMIT.
Considérez la requête suivante :
<code class="language-sql">SELECT foo, COUNT(*) OVER() AS full_count FROM bar WHERE <some condition=""> ORDER BY <some col=""> LIMIT <pagesize> OFFSET <offset>;</code>
Ici, full_count
fournit le nombre total de lignes avant que LIMIT ne soit appliqué.
Remarque : Utiliser les fonctions de fenêtre de cette manière peut être plus coûteux en termes de calcul que l'approche traditionnelle à deux requêtes. En effet, toutes les lignes doivent être comptées quels que soient les paramètres de pagination.
Dans certains cas, il n'est pas nécessaire d'obtenir le total avant LIMIT. Une alternative est :
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!