Page 1 sur 1
comment compter les ligne d'une table
Posté : 10 avr. 2005, 20:56
par toytoy
bonjour a tous,
G un ptit problème, je voulais savoir si ya moyen dans mysql de recupérer via PHP le nombres de lignes contenue dans une table sans créer un champ genre "user_id" avec auto increment pour savoir le nombre de ligne presente dans la table.
Merci d'avance.
Posté : 10 avr. 2005, 20:59
par ouckileou
Posté : 10 avr. 2005, 22:14
par Invité
merci bien ouckileou.
@+
Posté : 22 avr. 2005, 15:33
par bob l'éponge
Comment on fait pour afficher le résultat de cette requete en php ?
Posté : 22 avr. 2005, 15:53
par AntiZeus
Comme ça :
Code : Tout sélectionner
//La connexion à la base de données est déjà réalisée
$str_requete = "SELECT count(*) FROM maTable";
$o_result = mysql_query($str_requete);
//On place la première ligne du résultat de la requete dans un tableau
$a_result = mysql_fetch_array($o_result, MYSQL_ASSOC);
//On affiche la première case de ce tableau
echo $a_result[0];
Mais il existe un moyen plus simple
Code : Tout sélectionner
//La connexion à la base de données est déjà réalisée
$str_requete = "SELECT * FROM maTable";
$o_result = mysql_query($str_requete);
//On recupère le nombre de lignes retournées par cette requete
$i_nbLigne = mysql_num_rows($o_result);
//On affiche le nombre de lignes retournées
echo $i_nbLigne;
Mais la fonction mysql_num_rows ne fonctionne pas avec des requêtes du type INSERT, DELETE, UPDATE, ...
Posté : 22 avr. 2005, 15:56
par ouckileou
comme pour n'importe quelle requête SELECT
tu peux nommer la valeur obtenue et utiliser un mysql_fetch_array()
ou utiliser mysql_fetch_row()
$query = "SELECT COUNT(*) FROM laTable";
$rs_query = $mysql_query($query);
list($count) = mysql_fetch_row($rs_query);
echo "La table contient ".$count." enregistrement(s)";
ou encore mysql_fetch_assoc() qui fait à peu près pareil que mysql_fetch_array je crois
http://www.phpdebutant.org/article66.php
Posté : 22 avr. 2005, 16:03
par ouckileou
AntiZeus, je ne vois pas en quoi ta deuxième solution est plus simple
de plus, il cherchait à afficher le nombre de lignes d'une table donc le COUNT() est tout indiqué, je ne vois pas ce que INSERT, UPDATE et DELETE viennent faire là
et utiliser mysql_num_rows n'a pas vraiment d'intérêt ici, autant avoir le résultat directement en SQL non ?

Posté : 22 avr. 2005, 16:13
par Invité
Simplement que si il vaut utiliser les lignes retournées par sa requête, il n'a pas à réexecuter du SQL : 1 interrogation de base en moins => code optimisé !!!
En ce qui concerne les commandes INSERT, UPDATE, ect ... c'éatit juste pour prévenir que ça ne fonctionnait pas avec ces commandes en général, pas juste sur son problème !!!!
Je sais que j'extrapole un peu mais ça peut lui éviter de surcharger son code !!!
Posté : 22 avr. 2005, 16:40
par bob l'éponge
Ok merci bien je vais tester tout ça

Posté : 22 avr. 2005, 16:51
par ouckileou
Simplement que si il vaut utiliser les lignes retournées par sa requête, il n'a pas à réexecuter du SQL : 1 interrogation de base en moins => code optimisé !!!
En ce qui concerne les commandes INSERT, UPDATE, ect ... c'éatit juste pour prévenir que ça ne fonctionnait pas avec ces commandes en général, pas juste sur son problème !!!!
Je sais que j'extrapole un peu mais ça peut lui éviter de surcharger son code !!!
vu comme ça...

Posté : 22 avr. 2005, 18:22
par albat
Ces deux méthodes sont à utiliser, surtout la première - beaucoup plus élégante :
$requete_1 = "SELECT count(*) FROM table";
$resultat_1 = mysql_query($requete_1) or die();
$nombre_1 = mysql_result($resultat_1, 0);
$requete_2 = "SELECT count(*) AS total FROM table";
$resultat_2 = mysql_query($requete_2) or die();
$ligne_2 = mysql_fetch_assoc($resultat_2);
extract($ligne_2);
$nombre_2 = $total;
Sur des tables de type MyISAM, la requête
SELECT count(*) FROM table est optimisée.
Elle n'entraîne pas le parcours de la table en comptant les enregistrements
car la taille de la table est stockée dans une variable.
En conséquence, la méthode suivante est à éviter :
$str_requete = "SELECT * FROM maTable";
$o_result = mysql_query($str_requete);
$i_nbLigne = mysql_num_rows($o_result);
Désolé,
AntiZeus...

Posté : 23 avr. 2005, 14:05
par AntiZeus
Comme je le disais à ouckileou, j'ai donné cette solution dans un soucis d'éviter de faire 2 accès à la base de données car il vaut mieux faire une selection puis compter le nombre de résultat plutôt que de sélectionner le nombre de lignes puis de sélectionner les lignes !!!
Je reconnais que j'ai peut être extrapolé un peu vite, et il est vrai que s'il n'utilise pas le résultat de sa requête, un COUNT() est exécuté plus rapidement et le résultat occupe moins de place !!!