count et limit sur une requete

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2008, 12:11

bonjour a tous

une question rapide :

peut on cohabiter un count ( pour retourner le total de ligne ) et une clause limit pour la pagination dans une seul requete ?

:?:

merci par avance pour toute aide ! :P

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2008, 13:03

SQL_CALC_FOUND_ROWS et FOUND_ROWS()

mm ok par contre ca n' a pas l' air d'etre tres fiable :roll:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

07 août 2008, 13:31

Un SELECT count(*) renvoie une unique valeur : le résultat

Je ne comprends pas le besoin de paginer... :-k :-s

Mammouth du PHP | 1668 Messages

07 août 2008, 13:44

oui, on peut faire cohabiter les deux sans problèmes, ils sont indépendant l'un de l'autre, contrairement à WHERE.

albat, ça permet de ne pas envoyer toute les informations du résultat en même temps, immagine : l'utilisateur cherche dans la première tranche, si son résultat n'est pas là, hop il va sur la suivante et ainsi de suite, si on revois 10.000 résultat sur une page et que l'utilisateur trouve sa page au 15ème résultat, 9985 résultats auraient été viant alors que seulement 5 résultats auraient été inutile, deplus, ça augmente la charge et le temps d'affichage de la page...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 août 2008, 14:09

katagoto, un SELECT COUNT(*) sans GROUP BY ne renvoi qu'une seule ligne ... :roll:

Par contre, le besoin de paginer avec un COUNT prend son sens avec le GROUP BY ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2008, 14:33

bon ok ca a l air de passer meme si il y a quelques pb de perf sur des grosses tables ...

ca peut toujours servir: :lol:
$limitePage = 10;
	if(isset($_GET['NoPage']) AND !empty($_GET['NoPage']) AND is_int($_GET['NoPage']))
	{
		$lh = (int)$_GET['NoPage']*$limitePage;
		$limitSql = $lh.','.$limitePage;	
	}
	else 
	{
		$limitSql = $limitePage;	
	}
			
	$q = 'select SQL_CALC_FOUND_ROWS(Id),Id,Nom,Libelle from table LIMIT '.$limitSql;
	$result = mysql_query($q);	
	$q = 'select FOUND_ROWS()';
	$r = mysql_query($q);
	$d = mysql_fetch_row($r);

while {....

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

07 août 2008, 15:43

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer