Magazine Internet

Étude de cas PHP & MySQL : Connaître le nombre d’occurrences dans une table

Publié le 21 octobre 2009 par Methylbro

Étude de cas PHP & MySQL : Connaître le nombre d’occurrences dans une table

Premier exemple, le développeur qui n'a jamais appris autre chose que les requêtes de base et se limite aux outils les plus simples de PHP :

$sql = "SELECT * FROM maTable";
$res = mysql_query($sql);
while($row[] = mysql_fetch_array($res));
$nb = count($row);

Remarquez comme c'est magnifique ; lancer une boucle à l'exécution alors que c'est complètement inutile.

Comme deuxième exemple, je vais vous proposer une variante ; le développeur qui n'y connais toujours rien au SQL de base, mais qui c'est quand même penché un minimum sur la documentation de PHP :

$sql = "SELECT * FROM maTable";
$res = mysql_query($sql);
$nb = mysql_num_rows($res);

C'est presque acceptable. Cependant imaginez le nombre d'informations inutiles que vous allez faire circuler entre le serveur de données (ici MySQL) et votre script ? Si le nombre d'enregistrements dans votre table est conséquent, imaginez le temps que cela va prendre !

Bien évidement, vous avez la réponse en vous. Il faut utiliser la fonction SQL COUNT(). C'est logique. Comme cela on ne récupère que le nombre d'occurrences ; après tout pourquoi pas, c'est la seule chose que l'on veut non ?

En bon développeur consciencieux ; vous écrirez sans doutes quelque chose comme cela :

$sql = "SELECT COUNT(*) FROM maTable";
$res = mysql_query($sql);
$row = mysql_fetch_row($res);
$nb = $row[0];

Cependant même si vous êtes presque dans le vrai, une dernière chose me chipote sur cette solution. Pourquoi faire une affectation par ligne avec un fetch ? Il n'y a qu'une seule information dans le résultat votre requête, vous savez ou elle se trouve alors pourquoi ne pas aller la chercher directement ?

C'est pourquoi, et pour conclure, je proposerais tout simplement cette solution :

$sql = "SELECT COUNT(*) AS `nb` FROM `maTable`;";
$res = mysql_query($sql);
$nb = mysql_result($res, 0, 'nb');

Et vous, vous feriez comment ?


Retour à La Une de Logo Paperblog

LES COMMENTAIRES (1)

Par peterluz
posté le 09 février à 15:43
Signaler un abus

Sans rentrer dans des détails philosophique, il est bon de rappeler au développeur débutant de ne JAMAIS écrire un COUNT(*) mais un COUNT(id) par exemple. Vous y gagnerez encore. Il est aussi possible d'utiliser SQLCALCFOUND_ROWS lorsque vous utilisé des LIMIT.

A propos de l’auteur


Methylbro 17 partages Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog