Page 1 sur 1
faire une boucle for jusqu'à la fin d'une base
Posté : 14 juin 2005, 09:19
par Pasti$
Bonjour,
Voila j'ai encore un petit soucis. Je m'explique :
Dans ma base de données j'ai un champ total_questionnaire et je voudrais faire la moyenne de tout ce champ sur l'ensemble total de mon tableau mais je ne sais pas combien j'aurais de ligne dans ma base.
Je pense qu'il faut faire une boucle 'FOR' mais je ne sais pas comment dire à ma table 'relève moi toutes les lignes 'total_questionnaire' et ajoute-les jusqu'à la fin du tableau puis divise le total par le nombre de ligne.
Merci de m'aider
Bonne journée
Posté : 14 juin 2005, 09:21
par zeus
Tu peux faire ça directement en SQL
Posté : 14 juin 2005, 09:22
par Pasti$
Zeus : pourrais tu m'expliquer la requete en meme temps que j'essaie de comprendre un peu
Merci
Posté : 14 juin 2005, 09:29
par zeus
AVG est une fonction SQL qui fait la moyenne des valeurs qu'elle trouve dans le champs passé en paramètre
Si tu fait AVG(total_questionnaire), SQL va aditionner toutes les valeurs de ce champ pour toutes les lignes de ta table et va faire la moyenne
Je te propose cette solution car le traitement SQL est toujours plus rapide que le traitement PHP donc, tant qu'il existe des fonctions SQL qui permettent de faire ce qu'on demande, ça serait dommage de ne pas en profiter.
Posté : 14 juin 2005, 09:41
par Pasti$
mysql_select_db("formulaire");
$sql = "SELECT AVG(total_questionnaire) FROM reponses";
$moy = mysql_query ($sql);
echo "<br>La moyenne sur le questionnaire est de $moy.";
ce code me mets en résultat :
Resource id#4
qu'est ce qu'il se passe ?
Merci
Posté : 14 juin 2005, 09:48
par zeus
Je me demande si tu as exploré un minimum la doc PHP avant de venir ?
Ce n'est qu'une demi-critique !!!
http://www.phpfrance.com/tutoriaux/inde ... l-avec-php
Dans la catégorie 4), la réponse t'es donnée
mysql_query() retourne une ressource qui est inexploitable directement en PHP
Il faut tout d'abord que tu passe cette ressource par une autre fonction php
regarde du côté de
mysql_fetch_array,
mysql_result et
mysql_fecth_assoc et reviens moi avec une solution joliement sortie de ta tête.
C'est pas pour t'embeter, mais pour que tu comprennes bien comment ça marche
Posté : 14 juin 2005, 10:07
par Pasti$
mysql_select_db("formulaire");
$sql = "SELECT AVG(total_questionnaire) FROM reponses";
$moy = mysql_query ($sql);
$toootal=0;
while($val = mysql_fetch_array($moy)) // parcours des resultats
{
$toootal = $val['$toootal'];
}
echo "<br>La moyenne sur le questionnaire est de $toootal.";
je manque surement une etpae mais j'ai du mal a comprendre pourriez vous m'aider SVP merci
Posté : 14 juin 2005, 10:24
par zeus
Tu y es preque
mysql_query te retourne une ressource à traiter avec mysql_fetch_array() lorsque tu as plusieurs résultats dans plusieurs champs.
Dans ta requete, tu ne retourne qu'un champs donc tu peut te contenter de mysql_result()
De plus, ta requete ne va retourner qu'une seule ligne, donc tu n'as pas besoin de mettre en place un parcours.
- création requete
- exécution requete
- récupération DU résultat
- affichage du résultat
essaye ce code et surtout, essaye de le comprendre
//ouverture de la connexion
//Choix de la bdd
mysql_select_db("formulaire");
//Construction de la requete
$sql = "SELECT AVG(total_questionnaire) FROM reponses";
//exécution de la requete
$moy = mysql_query ($sql);
//récupération du résultat. on passe la ressource et la position du résultat, 1ere ligne, 1ere colonne
$total = mysql_result($moy, 0, 0);
//affichage du résultat
echo "<br>La moyenne sur le questionnaire est de $total.";
Posté : 14 juin 2005, 10:26
par sadeq
Ta requête revoit un seul champs et une seule ligne dans le résultat car il n'y a qu'une seule moyenne attendue.
Quand tu fait un mysql_fetch_array par exemple, tu explores la ressource du résultat de la requête et par conséquant tu accède à la ligne et au champs renvoyé.
Puisuq'il n'y a qu'une seule ligne composée d'un seul champs le fetch te produit un tableau (array) qui contient une ligne composée d'une seule case (n° 0) que tu peux traiter sous PHP:
exemple:
mysql_select_db("formulaire");
$sql = "SELECT AVG(total_questionnaire) FROM reponses";
$moy = mysql_query ($sql);
$val = mysql_fetch_array($moy) ;
echo $val[0]; //affiche la moyenne calculée par la requête
Remarque: ici t'as pas besoin de faire un while pour exécuter le fetch plusieurs fois puisque le résultat $moy ne doit contenir d'une ligne.
Posté : 14 juin 2005, 10:42
par Pasti$
Merci a vous en fait c'etait pas trés compliqué il suffit juste de comprendre comment ça marche et avoir une démarche à suivre.
Merci a vous et je vous souhaite une bonne journée
Posté : 14 juin 2005, 11:33
par Pasti$
existe t-il une methode pr faire l'addition d'un champ de tout une base ?
Posté : 14 juin 2005, 11:38
par zeus
Même réponse qu'avant :
Google est ton ami
essaye
Mais j'aimarais que tu ailles chercher sur le net la signification de SUM
Posté : 14 juin 2005, 11:43
par Pasti$
bah je vais aller voir SUM alors mais ce que je peux te dire c'est que je connais que lgroupe Punk Sum-41 c pas du php mais bon on peut sortir un peu de ce monde lol

Posté : 14 juin 2005, 11:44
par zeus
Mais avec Sum 41, le problème, c'est qu'ils te donnent pas le contenu de ta bdd
