faire une boucle for jusqu'à la fin d'une base

Eléphant du PHP | 90 Messages

14 juin 2005, 09:19

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
Modifié en dernier par Pasti$ le 14 juin 2005, 09:21, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2005, 09:21

Tu peux faire ça directement en SQL

Code : Tout sélectionner

SELECT AVG(total_questionnaire) FROM maTable
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 90 Messages

14 juin 2005, 09:22

Zeus : pourrais tu m'expliquer la requete en meme temps que j'essaie de comprendre un peu

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2005, 09:29

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.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 90 Messages

14 juin 2005, 09:41

					
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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2005, 09:48

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 90 Messages

14 juin 2005, 10:07

					
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
Tandis que le philosophe montre la lune avec son doigt, alors l'imbecile rtegarde le doigt

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2005, 10:24

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.";
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2005, 10:26

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 90 Messages

14 juin 2005, 10:42

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
Tandis que le philosophe montre la lune avec son doigt, alors l'imbecile rtegarde le doigt

Eléphant du PHP | 90 Messages

14 juin 2005, 11:33

existe t-il une methode pr faire l'addition d'un champ de tout une base ?
Tandis que le philosophe montre la lune avec son doigt, alors l'imbecile rtegarde le doigt

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2005, 11:38

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 90 Messages

14 juin 2005, 11:43

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:
Tandis que le philosophe montre la lune avec son doigt, alors l'imbecile rtegarde le doigt

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 juin 2005, 11:44

:langue:

Mais avec Sum 41, le problème, c'est qu'ils te donnent pas le contenu de ta bdd :langue:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer