Forum Clubic

Quelle différence entre ces 3 méthodes - Mysql, 3 méthodes de comptage

Bonjour,

Voici 3 codes pour compter le nombre de fiches d’une BDD, pouvez vous me dire les différences et qu’elle est celle qu’il vaut mieux utiliser


// méthode 1
$req = mysql_query("SELECT * FROM $table1");    
$nb_sites = mysql_numrows($req);

// méthode 2
$req= current(mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM $table1")));

// méthode 3
$result = mysql_unbuffered_query("SELECT COUNT(*) AS nb FROM $table1");
$row = mysql_fetch_assoc($result);
$req2= $row['nb'];


print "nb_sites = $nb_sites<br>";
print "req = $req<br>";
print "req2 = $req2<br>";

Et si vous connaissez une autre méthode n’hésitez pas…

  1. marchera jamais, c’est num_rows si j’ai bon souvenir. Sinon, ça ne marche pas si la requête est non bufferisée (unbuffered)

  2. un peu barbare, mais oui ça marche

  3. équivalent

J’utiliserai plutôt mysql_num_rows si possible, mais pour être compatible avec tout SGBD (genre pgsql) le COUNT(*) est mieux. ->

$q = mysql_unbuffered_query('SELECT COUNT(*) FROM ' . $table);
$t = mysql_fetch_row($q);
echo $t[0];

Saluton,
Avec MySQL c’est SELECT COUNT() qui sera le plus performant , tout au moins en ISAM, car la table ne sera même pas parcourue et le nombre de lignes sera directement lu dans le fichier de description.
COUNT(
) car COUNT(colonne) ne comptabilisera pas les lignes ou colonne est NULL.
nous avons débattu de ce sujet ici pas plus tard qu’avant-hier.

Donc d’après la dernière réponse sur Phpdebutant.org, le mieux est d’utiliser la 3ème méthode puisque mysql_unbuffered_query n’utilise pas de ressource.

Tu peux me le confirmer ? merci.

remarque : mysql_unbuffered_query ne fonctionne peut-être pas avec mysql_num_rows mais fonctionne très bien avec mysql_fetch_assoc.

Mais peut-être qu’à ce moment là, c’est mysql_fetch_assoc qui pompe beaucoup de ressource ?..

Si l’on est bien dans le cadre du cahier des charges initial de ta question :[quote=""]
compter le nombre de fiches d’une BDD
[/quote]
(au passage il s’agit du nombre de lignes d’une table de BDD), sans besoin de parcourir le résultat, $res=msql_query(“SELECT COUNT(*) FROM table”) couplé à echo mysql_result($res) est ce qui te donnera le plus rapidement le résultat en consommant le moins de ressources.

http://fr.php.net/manual/fr/function.mysql-result.php

("Ces [mysql_fetch_*] sont NETTEMENT plus rapides")

Ensuite, c’est mimi de dire l’un est mieux, mais n’oublie pas que cela dépend de ce que tu veux faire. Les deux requêtes sont parfaitement différentes : la première va simplement le nombre de résultats d’une requête bufferisée, la seconde le nombre de données dans la table.

Pour la rapidité, tu as qu’à tenter un for ( $i in [0,10000]) en testant le temps d’éxécution de chaque via microtime().

bon ! au vu de ce que j’ai pu lire un peu partout et surtout que je dois minimiser au max les ressources serveurs, je pense opter pour :

$result = mysql_unbuffered_query("SELECT COUNT(*) AS nb FROM $table1");     
$row = mysql_fetch_assoc($result);
$nb_sites= $row['nb'];

En effet, c’est pour faire des stats sur une même page et je voudrais pouvoir travailler les 4 tables qui composent mon site. Donc plusieurs requêtes sur chaque table afin d’avoir toutes les données qui m’intéressent.

Et merci pour votre aide