créer une note moyenne

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 13:02

Bonjour
Je cherche à créer une note moyenne dans une de mes pages.

Cette page est en lien avec une table de style :

id ville note

1 paris 4
2 paris 3
3 Lyon 4
4 paris 5

Comment faire pour additionner les notes de la ville appelée en URL (mapage.php?ville=paris) et diviser le tout par le nombre d'enregistrement Paris?

2ème question: quel est le moyen pour en récupérer un chiffre arrondi à 0,5? (1;1,5;2;2,5....)
Ce chiffre servira à aller chercher une image.

J'espère avoir été clair.
Merci.

Mammouth du PHP | 19672 Messages

11 oct. 2006, 13:09

Tu pourrais récupérer directement la moyennes via une requête SQL triée par villes, ça donnerait quelque chose du genre :

Code : Tout sélectionner

SELECT ville, AVG(note) AS moyenne FROM ma_table_de_notes GROUP BY ville ORDER BY ville;
Adapte en mettant le bon nom de table et teste ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 15:51

Ca ne marche pas.
J'ai des notes comprises entre 0 et 5 et je me retrouve avec des moyennes de 12,3467... voire plus.

Eléphant du PHP | 193 Messages

11 oct. 2006, 15:55

Pourtant, la requête de Cyrano est correcte. Peut-on voir la tienne?

Mammouth du PHP | 19672 Messages

11 oct. 2006, 15:57

Ce n'est pas que ça ne marche pas, c'est que le degré de précision du résultat est trop grand, il faut donc procéder à un arrondi. Regarde du coté de la fonction php round() pour limiter le nombre de décimales.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 193 Messages

11 oct. 2006, 16:00

Je crois que l'arrondi est encore un autre problème Cyrano, puisque l'AVG lui retourne une valeur supérieure à la plus grande valeur de la population :? Le round lui donnerait 12.3, quand la meilleure note est 5. Si seulement mes profs me faisaient les mêmes moyennes :D

Mammouth du PHP | 19672 Messages

11 oct. 2006, 16:07

Fais donc voir la structure de ta table et un jeu d'essai, ne voyant pas ce que tu fais, je ne peux que deviner et je n'ai aucune idée de l'erreur faite, parce que c'est sûr qu'il y a une erreur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 16:09

SELECT lieu, AVG(note) AS moyenne
FROM photo
WHERE photo.lieu = colname
GROUP BY lieu
ORDER BY lieu

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 16:10

Je vois que tu suis Vikchill!

Mammouth du PHP | 592 Messages

11 oct. 2006, 16:12

et si tu ne met que ça :

Code : Tout sélectionner

SELECT lieu, AVG(note) FROM photo WHERE lieu = 'colname' GROUP BY lieu ;

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 16:15

et si tu ne met que ça :

Code : Tout sélectionner

SELECT lieu, AVG(note) FROM photo WHERE lieu = 'colname' GROUP BY lieu ;
Non, même résultat...

Mammouth du PHP | 592 Messages

11 oct. 2006, 16:19

en sortie de résultat ou après ton script d'arrondi???

quelle est la moyenne qui devrai s'afficher??

passe nous un bout de ta page php sinon :wink:

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 16:23

Exemple :

Code : Tout sélectionner

Atlantic City 3 Atlantic City 4 Atlantic City 3 Atlantic City 4 Atlantic City 4 Atlantic City 4 Atlantic City 3 Atlantic City 3 Atlantic City 4 Atlantic City 4 Atlantic City 4 Atlantic City 3 Atlantic City 3
Il me trouve la moyenne de 12,30769.....

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 16:30

Je n'ai pas encore fais l'arrondi puisque la moyenne n'est pas bonne.
mysql_select_db($database_photos, $photos);
$query_notemoyenne = sprintf("SELECT lieu, AVG(note) AS moyenne 
FROM photo WHERE photo.lieu = %s GROUP BY lieu ORDER BY lieu ", GetSQLValueString($colname_notemoyenne, "text"));
$notemoyenne = mysql_query($query_notemoyenne, $photos) or die(mysql_error());
$row_notemoyenne = mysql_fetch_assoc($notemoyenne);
$totalRows_notemoyenne = mysql_num_rows($notemoyenne);

lorenzo75
Invité n'ayant pas de compte PHPfrance

11 oct. 2006, 16:32

Pour l'exemple (Atlantic city), il devrait m'afficher 3,538....