comment compter les ligne d'une table

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : comment compter les ligne d'une table

par AntiZeus » 23 avr. 2005, 14:05

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 !!!

par albat » 22 avr. 2005, 18:22

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... ;)

par ouckileou » 22 avr. 2005, 16:51

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... :)

par bob l'éponge » 22 avr. 2005, 16:40

Ok merci bien je vais tester tout ça :D

par Invité » 22 avr. 2005, 16:13

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 !!!

par ouckileou » 22 avr. 2005, 16:03

AntiZeus, je ne vois pas en quoi ta deuxième solution est plus simple :roll:

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 ? :)

par ouckileou » 22 avr. 2005, 15:56

comme pour n'importe quelle requête SELECT

tu peux nommer la valeur obtenue et utiliser un mysql_fetch_array()

Code : Tout sélectionner

SELECT COUNT(*) AS count FROM laTable
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

par AntiZeus » 22 avr. 2005, 15:53

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, ...

par bob l'éponge » 22 avr. 2005, 15:33

Comment on fait pour afficher le résultat de cette requete en php ?

par Invité » 10 avr. 2005, 22:14

merci bien ouckileou.

@+

par ouckileou » 10 avr. 2005, 20:59

Code : Tout sélectionner

SELECT COUNT(*) FROM laTable

comment compter les ligne d'une table

par toytoy » 10 avr. 2005, 20:56

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.