Faire la moyenne des champs d'une base de données mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Faire la moyenne des champs d'une base de données mysql

par chrislabricole » 30 juin 2007, 14:20

à ok merci ! :D

par Sékiltoyai » 30 juin 2007, 14:09

par chrislabricole » 30 juin 2007, 13:45

à ouai ok, c'est fais plus clean ! :D
eumm..
il y a pas une page sur PHPFrance avec TOUTES les requètes possibles sur mysql ??

PS :(HS)
Et au passage que je parle de tuto je les ai revisité, sa, c'est gratuit ?
http://www.phpfrance.com/tutoriaux/inde ... tp-farheen

par Cyrano » 30 juin 2007, 08:43

Si tu n'as besoin que de la moyenne, tu pourrais faire ça directement en SQL dans ta requête avec un agregat : AVG() (en anglais, "average" = "moyenne". Et comme tu utilises MySQL, il y a même une autre fonction qui pourrait te permettre de n'avoir que deux chiffres après la virgule : ROUND(col, precision) : ça donnerait la requête suivante :

Code : Tout sélectionner

SELECT ROUND(AVG(note), 2) as moyenne FROM comment
ça va te retourner une donnée unique au lieu d'un paquet de lignes à traiter.

Exemple : avec une table, voici une colonne "note":

Code : Tout sélectionner

mysql> SELECT note FROM notes; +------+ | note | +------+ | 1 | | 9 | | 8 | | 0 | | 19 | | 5 | | 12 | | 17 | | 6 | | 13 | | 2 | | 5 | | 17 | | 18 | | 4 | | 6 | | 9 | | 10 | | 17 | | 18 | | 0 | | 17 | | 2 | | 19 | | 16 | | 9 | | 11 | | 14 | | 20 | | 4 | | 9 | | 3 | | 10 | | 15 | | 7 | | 15 | | 17 | | 13 | | 11 | | 7 | | 10 | | 19 | | 0 | | 10 | | 17 | | 18 | | 12 | +------+ 47 rows in set (0.00 sec) mysql> SELECT ROUND(AVG(note), 2) as moyenne FROM notes; +---------+ | moyenne | +---------+ | 10.66 | +---------+ 1 row in set (0.02 sec)

par chrislabricole » 29 juin 2007, 23:52

a ! voila sa marche le problème maintenent, c'est qu'il me dit que la moyenne est de :
11.3333333333

quel est la fonction pour arrondir au dixièmes ? je connait round() mais elle arrondi pas au dixième... elle arrondi au chiffre "pile" (11) peut-être que round peut prendre un atribu ??

EDIT : oui, j'ai trouver grace à la doc, round($moy = $total / $num, 2)

voici le code fini pour les intéréssés :
$result = mysql_query("SELECT note FROM comment");
$num = mysql_num_rows($result);
$total= 0 ;
while($note = mysql_fetch_assoc($result))
{
$total += $note['note'];
}

if($num != 0) 
{
echo round($moy = $total / $num, 2);
} 
Merci !

par orgerix » 29 juin 2007, 23:39

POurquoi le += : $var1+=$var2 est équivalent à $var1 = $var1 + $var2.

Donc a chaque extraction, la valeur total augmentera de la valeur extraite de la BDD.

Ensuite le if, c'est tout simplement pour éviter les erreurs de divisions par zéro.

Tel que ton script est écrit, $total_des_notes vaut toujours 0 car jamais redéfini.

par chrislabricole » 29 juin 2007, 23:34

Je ne compremd pas pourquoi tu fait un if et un += ???

moi, j'ai fais sa avant ta réponce plus complête mais c'est pas encore très au point...
$req = mysql_query('SELECT note FROM comment');         
$count = mysql_fetch_array($req);

$total_des_notes = 0;

while($donnees = mysql_fetch_assoc($req))
{
$phase1 = $total_des_notes + $donnees['note'];
}

$total_des_notes / $count;
eu ! sa marche pas !
à cette ligne :
$total_des_notes / $count;

Fatal error: Unsupported operand types in /mnt/145/sdb/c/d/***********/moyenne.php on line 27

par orgerix » 29 juin 2007, 23:29

Message édité avec une réponse plus complete ;)

par chrislabricole » 29 juin 2007, 23:28

Tu fait une requete qui demande toutes les notes
ben, sa, j'arrive pas à le faire,
c'est récupérer toute les notes et les additionées que j'arrive pas à faire...

par orgerix » 29 juin 2007, 23:25

Tu fait une requete qui demande toutes les notes, tu compte le nombre de résultat (mysql_num_rows()), et à chaque extraction(mysql_fetch_assoc()), tu ajoute la note à une variable initalisé à 0. ENsuite tu divise tout par le nombre d'enregistrement.


Ca donne quelque chose comme ca
$result=mysql_query("SELECT note FROM comment");
$num=mysql_num_rows($result);
$total=0;
while($note=musql_fetch_assoc); {
 $total+=$note['note'];
}
if($num!=0) {
 $moy=$total/$num
}

Faire la moyenne des champs d'une base de données mysql

par chrislabricole » 29 juin 2007, 23:08

Bonjour,

je voudrait faire la moyenne des note des visiteur..., je m'explique
dans mysql, il y a champ "note" (sur 20) et je ne c'est pas comment faire pour dire à php :
selectionne toutes les données du champs "note" et tu les additionne toutes....
je ne sais pas quel fontion utilisé, je ne sais pas comment faire, après, pour diviser par le nombre d'entrés, je sais faire...
voilà, j'espère être clair...

Merci de vos réponses :)

PS: j'ai fais sa mais j'arrive pas à aller plus loin.... :
$req = mysql_query('SELECT note FROM comment');         
$count = mysql_fetch_array($req);