Nombre d'élement

Eléphant du PHP | 54 Messages

19 févr. 2007, 17:13

Bonjour,

J'aurais besoin d'aide pour une méthode ou si il existe une fonction qui me permettrai d'afficher le nombre d'élément dans une table.

J'ai une table membres avec différents champ dont un qui s'appel FU, dans ce champ on peux trouver comme renseignement soit FU1, FU2 ou FU3, et j'aimerais donc récupérer le nombre de FU1 de FU2 et de FU3 dans une variable.

J'ai essayer de faire :

Code : Tout sélectionner

SELECT FU,COUNT(*) FROM membres GROUP BY FU
Si quelqu'un aurais une idée merci ! :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 févr. 2007, 17:24

Ta requête m'a pourtant l'air bonne... on pourrait éventuellement y ajouter un distinct, mais normalement le group by devrait être suffisant... qu'est ce qui ne fonctionne pas ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 54 Messages

19 févr. 2007, 17:38

//Compter le nombre de fU
$nb_fu = mysql_query("SELECT FU,COUNT(*) FROM membres GROUP BY FU") or die($erreur=mysql_error());
echo $nb_fu;
Resultat :

Code : Tout sélectionner

Resource id #12

J'ai exactement mis ça, mais sa ne me retourne aucun chiffre ^^

A mon avis il faudrais que je récupère le resultat à l'aide d'une fonction mysql mais je vois pas du tous laquelle !!

Voilou si tu veux plus de renseignement d'explication demande moi !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 févr. 2007, 17:44

mysql_query
(...)
Valeurs de retour
Pour les requêtes du type SELECT, SHOW, DESCRIBE ou EXPLAIN, mysql_query() retournera une ressource en cas de succès, ou FALSE en cas d'erreur.
(...)
La ressource de résultat retournée doit être passée à la fonction mysql_fetch_array(), et les autres fonctions permettant d'explorer le résultat des tables, pour accéder aux données retournées.
Il te faut donc parcourir chaque enregistrement retourné par ta requête avec un mysql_fetch_* pour afficher les valeurs de FU et du COUNT(*). Je te recommande d'ailleurs de lui donner un alias, ca sera plus simple :)

Code : Tout sélectionner

"SELECT fu, COUNT(*) AS nb FROM membres GROUP BY FU"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 54 Messages

19 févr. 2007, 17:54

Hmmmm quelque chose comme ça alors :
//Compter le nombre de fU
$nb_fu = mysql_query("SELECT FU, COUNT(*) AS nb FROM membres GROUP BY FU") or die($erreur=mysql_error());
while ($nbfu = mysql_fetch_array($nb_fu))
{
echo $nbfu[fu];
}
:?

Eléphanteau du PHP | 15 Messages

19 févr. 2007, 18:00

Oi,
//Compter le nombre de fU
$nb_fu = mysql_query("SELECT FU, COUNT(*) AS nb FROM membres GROUP BY FU") or die($erreur=mysql_error());
echo mysql_fetch_array($nb_fu); 
Il est ici inutile de faire un while qui ira parcourir la table étant donné que le nombre d'enregistrements retourné sera de 1.
L'égalité entre les hommes est une règle qui ne compte que des exceptions

Eléphant du PHP | 54 Messages

19 févr. 2007, 18:06

Il est ici inutile de faire un while qui ira parcourir la table étant donné que le nombre d'enregistrements retourné sera de 1.
Salut,

Heu....je ne comprend plus trop là :shock:

Pourquoi le nombre de d'enregistrements retourné serais de 1 ? je veux qu'il m'affiche le nombre de fois qu'il trouvera un FU 1 ou FU 2 ou FU 3 dans ma table et se resultat n'est pas forcément égal à 1.

Eléphanteau du PHP | 15 Messages

19 févr. 2007, 18:13

Au temps pour moi j'ai mal lu le premier post, tu veux le résultat pour chaque FU1,FU2,FU3, et non le nombre total d'enregistrement.

Ton code paraît bon.
L'égalité entre les hommes est une règle qui ne compte que des exceptions

Eléphant du PHP | 54 Messages

19 févr. 2007, 22:47

Bah sa me retourne "Array" comme réponse :////

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 févr. 2007, 00:37

Et si on essayait de faire simple ?... ;)
$req = "SELECT count(*) FROM membres GROUP BY fu";
$res = mysql_query($req) or die();
$nb_fu = mysql_result($res, 0);

Eléphant du PHP | 54 Messages

20 févr. 2007, 09:57

$req = "SELECT count(*) FROM membres GROUP BY fu";
$res = mysql_query($req) or die();
$nb_fu = mysql_result($res, 0);
Génial !! Merci albat c'est exactement ce que je voulais !!

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 févr. 2007, 10:11

Et, une fois de plus, une écrasante victoire de la coccinelle facétieuse sur le piaf anémique ! \:D/ :langue:

Eléphant du PHP | 54 Messages

20 févr. 2007, 11:16

En faite j'ai sortis le champagne un peu trop tôt sa marche sans vraiment marcher :shock:

Quand je fais :

Code : Tout sélectionner

SELECT count(*) FROM membres GROUP BY fu
J'ai comme résultat ( dans la base de donnée ) :

Code : Tout sélectionner

count(*) 2 4 1
Donc en faite il ne me donne pas le nobmre maximum qu'il compte mais il les trie par FU donc sa sera toujours la FU 1 si elle existe en premier

donc j'ai essayer de faire :

Code : Tout sélectionner

SELECT FU, COUNT(*) AS nb FROM membres GROUP BY FU order by nb desc
Quand je regarde le resultat sa me donne bien :

Code : Tout sélectionner

FU nb FU +2 4 FU +1 2 FU +3 1
Donc la il faudrait que je récupère le fameux "nb" mais je vois pas trop comment :?:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 févr. 2007, 11:29

Essaye comme ceci :
$rs = mysql_query("SELECT fu, COUNT(*) AS nb FROM membres GROUP BY fu") or die($erreur=mysql_error()); 
while ($row = mysql_fetch_array($rs)) { 
  echo $row['fu'] . '=>' .$row['nb'] .'<br>'; 
}
Sinon tu peux utiliser la solution inneficace de la coccinnelle prétentieuse en lui ajoutant un "ORDER BY fu" pour avoir tes résultats par ordre croissant de fu ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 54 Messages

20 févr. 2007, 11:41

Sinon tu peux utiliser la solution inneficace de la coccinnelle prétentieuse en lui ajoutant un "ORDER BY fu" pour avoir tes résultats par ordre croissant de fu ;)
Non sa j'ai déjà essayer sa ne peux pas marcher étant donnée que si j'ai "1" dans fu 1 il va m'afficher le 1 en premier quelle que soit le resultat du fu 2 ou fu 3 ^^