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

Code : Tout sélectionner

SELECT AVG(total_questionnaire) FROM maTable

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

Code : Tout sélectionner

SELECT SUM(champ) FROM table
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 :lol:

Posté : 14 juin 2005, 11:44
par zeus
:langue:

Mais avec Sum 41, le problème, c'est qu'ils te donnent pas le contenu de ta bdd :langue: