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

Publié le 21 octobre 2009 par Methylbro

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 ?