Alors, pourquoi nous avons besoin de calculer le nombre total d'élements de la table ?
Tout simplement, pour connaitre le nombre de pages du bouzin.
Si tu fais directement des LIMIT, tu ne sauras jamais si tu es sur la dernière page de ta pagination, c'est logique.
Par la même, tu ne pourras pas faire de lien (à partir de la première page) qui pointe directement sur la dernière page.
Toutefois, on peut tout de même le faire en une seule requête (en fait deux, mais pour la deuxième, MySQL travaillera presque pas) : en faisant un SELECT SQL_CALC_FOUND_ROWS.
C'est une fonction méconnue de MySQL qui permet de faire une requete avec un LIMIT, et on obtient deux résulats :
- la liste des éléments récupérés
- le nombre total d'éléments de la table (soit la meme requete sans LIMIT).
Exemple :
<?php
$sql = "SELECT SQL_CALC_FOUND_ROWS `blu` FROM `table` ORDER BY `blu` ASC LIMIT 10";
$req = mysql_query($sql) or die ('Erreur SQL !'.$sql.''.mysql_error());
$sql2 = "SELECT FOUND_ROWS() as `total`";
$req2 = mysql_query($sql2) or die ('Erreur SQL !'.$sql2.''.mysql_error());
$nb_total = mysql_fetch_assoc($req2);
$nb_total = $nb_total['total'];
?>
La requete $sql2 est extremement rapide à s'executer (faites le test), et la, on a toutes les infos :
- le nombre total d'element (calculé non pas avec un count tres long et gourmant en ressource, mais avec un SQL_CALC_FOUND_ROWS)
- les éléments à afficher gràce au LIMIT