blog actif depuis 1328 jours.

retours d'expériences, codes sources, réflexions, humeurs... d'un webmaster

 

Lun.

08

Juin

 
Quand vous affichez une liste très grande de résultats, il est préférable de paginer, c'est à dire de découper cette liste sur plusieurs pages.
Voici une astuce pour récupérer le nombre total de résultats d'une requête, nécessaire ici pour savoir combien de pages afficher.

Prenons par exemple, la requête
SELECT * FROM ma_table;
qui retourne 150 résultats.
On décide d'afficher ces résultats sur 5 pages de 30 résultats. On va donc optimiser la requête pour ne sélectionner que les résultats correspondant à la page à afficher :
par exemple, pour la première page :
SELECT * FROM ma_table LIMIT 30;
Le souci est que le nombre de résultats retourné est non plus 150 mais 30. On pourrait refaire un
SELECT COUNT(*) FROM ma_table;
mais cette solution force à ré-exécuter une requête et n'est pas très élégante.

Il existe une méthode simple pour récupérer le nombre total de résultats : on ajoute SQL_CALC_FOUND_ROWS au SELECT :
SELECT SQL_CALC_FOUND_ROWS * FROM ma_table LIMIT 30;
Cette requete retourne bien les 30 premiers résultats.
On récupère ensuite le nombre de résultats total avec:
SELECT FOUND_ROWS();

 

Commentaires

Merci pour cette info très utile pour la pagination de nos pages, un grand merci.

09/07/2009

 

Ajouter un commentaire

nom / pseudo :
e-mail :

(Votre e-mail ne sera ni exploité, ni divulgué.)

site (facultatif)
 
romualb.com est sur Facebook
<Février 2012 
LunMarMerJeuVenSamDim
  01 02 03 04 05
06 07 08 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29