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 ?
LES COMMENTAIRES (1)
posté le 09 février à 15:43
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.