Script de pagination

Répondre
maxroucool
le 04/03/2006 à 16:30
maxroucool
Slt tlm,

dans tous les scripts de pagination que je trouver sur internet, tous ont besoin de 2 requettes, une qui selectionne toutes les entrées de la table, puis une seconde qui selectionne juste les donnees interressante avec un LIMIT.

Seulement, je viens de faire un moteur de recherche pour mon site avec des requettes avec MATCH AGAINST qui a mon avis demande beaucoup de ressources.


J'ai donc fais un script de pagination ne necessitant qu'une seule requette, mais je me demandais si ca changer vraiment le temps d'execution du script, ou bien si ca n'était pas la peine de m'embeter avec ca?
http://www.lephpfacile.com/wall/wall.php?id=2616



Merci bp!
+++
LA GLOBULE
le 04/03/2006 à 17:10
LA GLOBULE
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
maxroucool
le 04/03/2006 à 17:54
maxroucool
OK merci ben je vais voir ca.
Mais juste par curiosité, ca le fait pas ce que j'avais fait?
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours