Page 1 sur 2
additionner les entrées dans une colonne de tableau
Posté : 12 nov. 2006, 11:11
par Kaoteknik
Bonjour,
Comme vous pouvez vous en douter, j'ai un petit soucis !
J'aimerai, comme indiqué dans le titre, additionner des chaînes de caractères dans une colonne d'un tableau. Le tableau se présente sous cette forme :
Code : Tout sélectionner
____________________________
PRENOM | MOIS DE NAISSANCE
____________________________
George | septembre
Gisèle | janvier
Raymond | aout
Sophie |
Robert | juin
Patrick | mars
Julia | novembre
Laurent |
Elodie |
Nestor | décembre
____________________________
| 7
____________________________
Toutes les entrées de la table sont stockées dans une base de données. Le but, dans l'exemple ci-dessus, étant d'obtenir le chiffre 7, puisque 7 personnes ont renseigné le champ "mois de naissance". J'aimerai donc que les champs vides ne soient pas pris en compte.
J'ai cherché une solution avec la fonction "count" et les boucles, mais je ne vois pas bien comment organiser ça.
Voilà, merci de m'aider !

Posté : 12 nov. 2006, 11:19
par Cyrano
Plutôt que de faire une moulinette en PHP, fais le directement en SQL : une requête peut très bien compter les lignes selon des critères définis et là, ça ressemblerait à quelque chose comme ceci :
Code : Tout sélectionner
SELECT COUNT(`prenom`)
FROM `ma_table`
WHERE `mois_naissance` <> '';
Ce qui, traduit en français, se formulerait de la manière suivante :
"
Compte le nombre de prénoms où le mois de naissance n'est pas vide"
Posté : 12 nov. 2006, 11:20
par RilaX
La comme ca, vite fait, un petit bricolage (il existe donc peut etre mieux) :
$resultat=mysql_query(tarequete);
$cpt=0;
while (mysql_fetch_array($resultat)){
$cpt++;
}
echo $cpt;
Et normalement, ton $cpt contient le nombre de reponse que t'as retourné ta requete sql.
Posté : 12 nov. 2006, 11:27
par Cyrano
La comme ca, vite fait, un petit bricolage (il existe donc peut etre mieux) :
$resultat=mysql_query(tarequete);
$cpt=0;
while (mysql_fetch_array($resultat)){
$cpt++;
}
echo $cpt;
Et normalement, ton $cpt contient le nombre de reponse que t'as retourné ta requete sql.
C'est une idée, mais c'est se compliquer la vie pour peu de choses : au lieu d'une boucle incrémentant un pointeur, il vaudrait mieux utiliser mysql_num_rows() qui retournera directement le nombre de lignes.
Posté : 12 nov. 2006, 11:28
par Kaoteknik
Merci pour vos réponses, je vais tester ça immédiatement !
(merci également d'avoir formaté mon tableau ci-dessus, on y voit plus clair comme ça. La prochaine fois je saurai que je dois utiliser les balises "code" !)
Posté : 12 nov. 2006, 12:01
par Kaoteknik
Bien j'ai testé ceci, mais ça me retourne une erreur (FUNCTION ma_bdd.COUNT does not exist)
<?php
$requete="SELECT COUNT(prenoms) FROM ma_table WHERE mois";
$affiche_resultat=mysql_query($requete) or die (mysql_error());
?>
<td>Total :<br/>
<?php
echo $affiche_resultat;
?>
</td>
Posté : 12 nov. 2006, 12:35
par Cyrano
Alors plusieurs choses :
D'abord, j'ai mis des noms fictifs, à toi de les adapter dans la requête à ta propre base selon les noms de la table et des colonnes;
Ensuite, la fonction COUNT() existe dans MySQL depuis pas mal de temps, il me paraît hautement improbable que MySQL retourne une erreur de ce genre; As-tu essayé de lancer la requête dans phpMyAdmin ?
Enfin, tu fais un echo() sur la ressource au lieu de récupérer le résultat, tu n'auras donc qu'une erreur.
Après mysql_query(), il faut utiliser mysql_result() pour récupérer le résultat retourné.
Posté : 12 nov. 2006, 12:51
par Kaoteknik
Donc oui, j'ai bien remplacé les noms des champs que tu as mis par ceux qui correspondent à ma base.
J'ai ensuite exécuté la requête sql directement dans phpMyAdmin, et elle s'est parfaitement effectuée, me retournant la valeur voulue.
Il me reste à voir comment utiliser la fonction mysql_result(). Mon problème vient sûrement de là et de l'echo !

Posté : 12 nov. 2006, 13:02
par Kaoteknik
Je viens donc de modifier mon code par ceci :
<?php
$requete="SELECT COUNT(prenoms) FROM ma_table WHERE mois";
$affiche_resultat=mysql_query($requete) or die (mysql_error());
?>
<td>Total :<br/>
<?php
echo mysql_result($affiche_resultat, 3);
?>
</td>
L'erreur retournée est toujours la même !

Posté : 12 nov. 2006, 13:14
par Kaoteknik
Bon, je viens déjà de trouver un élément de réponse à mon erreur :
J'ai en effet placé un espace entre "COUNT" et "(prenoms) dans ma requête, ce qui a généré l'erreur "COUNT does not exist".
Ce problème est à présent résolu.
Reste qu'il me retourne maintenant une nouvelle erreur :
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 3 on MySQL result index 4 in /home.10.4/ma_base/www/php/tableau.php on line 273
J'imagine que mon paramètre 3 est la cause du problème... Je vais essayer de comprendre le schmilblick !
Posté : 12 nov. 2006, 13:26
par Cyrano
Normal, le second paramètre que tu as mis est 3 au lieu de 0 alors que la requête ne retourne qu'un seul et unique nombre : c'est comme un tableau indexé et le premier index est donc 0 : par conséquent, remplace le 3 par 0 et refais l'essai.
Posté : 12 nov. 2006, 13:42
par Kaoteknik
Bon, je n'ai plus de message d'erreur, il me reste néanmoins un problème : le résultat retourné est 4, alors que j'ai 38 champs remplis dans la colonne "mois".
Posté : 12 nov. 2006, 13:47
par Cyrano
Teste ta requête dans phpMyAdmin : quand la requête sera au point et retournera le résultat attendu, alors seulement tu l'intègreras en PHP.
Posté : 12 nov. 2006, 15:10
par Kaoteknik
Eh bien, ma requête sur phpMyAdmin retourne le bon résultat (40 maintenant), mais mon code php renvoie dans le tableau la valeur 4.
Est-ce un problème de formatage des chiffres ?
Posté : 12 nov. 2006, 17:26
par Cyrano
Fais voir le code corrigé