additionner les entrées dans une colonne de tableau

Eléphant du PHP | 185 Messages

12 nov. 2006, 11:11

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

Mammouth du PHP | 19672 Messages

12 nov. 2006, 11:19

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"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 38 Messages

12 nov. 2006, 11:20

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.

Mammouth du PHP | 19672 Messages

12 nov. 2006, 11:27

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 185 Messages

12 nov. 2006, 11:28

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

Eléphant du PHP | 185 Messages

12 nov. 2006, 12:01

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>

Mammouth du PHP | 19672 Messages

12 nov. 2006, 12:35

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é.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 185 Messages

12 nov. 2006, 12:51

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

Eléphant du PHP | 185 Messages

12 nov. 2006, 13:02

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

Eléphant du PHP | 185 Messages

12 nov. 2006, 13:14

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 !

Mammouth du PHP | 19672 Messages

12 nov. 2006, 13:26

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 185 Messages

12 nov. 2006, 13:42

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

Mammouth du PHP | 19672 Messages

12 nov. 2006, 13:47

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 185 Messages

12 nov. 2006, 15:10

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 ?

Mammouth du PHP | 19672 Messages

12 nov. 2006, 17:26

Fais voir le code corrigé
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: