Page 1 sur 1

afficher note moyenne sql

Posté : 13 nov. 2013, 09:32
par Guillaume324
Bonjour,

Je cherche à afficher la note moyenne pour chaque news.
$retour_messages=$cnx->query('SELECT news, AVG(note) AS moyenne FROM '.$prefixe.'_comments GROUP BY news');
$donnees_messages=$retour_messages->fetch(PDO::FETCH_ASSOC);

$note = $donnees_messages['moyenne'];
$starLevel = 0;
if(empty($note)){}
elseif($note<=1){ $starLevel = 1;}
elseif($note<=2){ $starLevel = 2;}
elseif($note<=3){ $starLevel = 3;}
elseif($note<=4.5){ $starLevel = 4;}
elseif($note<=5){ $starLevel = 5;}
$affnote = '<img src="note/'.$starLevel.'star.png" border="0">';

echo '$affnote';
Mais ce n'est pas le bon résultat qui s'affiche, ça me donne la note moyenne pour toutes les news en même temps.

Merci d'avance pour votre aide !

Re: afficher note moyenne sql

Posté : 13 nov. 2013, 10:01
par sirakawa
Il faut peut être mettre du where là dedans...

Re: afficher note moyenne sql

Posté : 13 nov. 2013, 12:51
par yann18
bonjour,

Que donne ta requête sql quand elle est exécutée au niveau de la console mysql ou de phmyadmin?
dans ton code on ne voit pas la boucle qui doit parcourir le tableau de données? sinon essaies de faire un débogage sur le tableau de données:
 $donnees_messages=$retour_messages->fetch(PDO::FETCH_ASSOC);
var_dump($donnees_messages);//affiche la moyenne par news

Re: afficher note moyenne sql

Posté : 13 nov. 2013, 18:48
par Guillaume324
Désolé de répondre tardivement, mais je n'avais plus de connexion internet !

Au début, j'avais fait ma requête ainsi :
$retour_messages=$cnx->query('SELECT news, AVG(note) AS moyenne FROM '.$prefixe.'_comments WHERE news='.$id.' GROUP BY news');
Mais ça ne donnait rien.

Le var_dump me donne ça :

Code : Tout sélectionner

array(2) { ["news"]=> string(2) "10" ["moyenne"]=> string(6) "4.0000" }

Re: afficher note moyenne sql

Posté : 13 nov. 2013, 23:22
par yann18
Désolé de répondre tardivement, mais je n'avais plus de connexion internet !

Au début, j'avais fait ma requête ainsi :
$retour_messages=$cnx->query('SELECT news, AVG(note) AS moyenne FROM '.$prefixe.'_comments WHERE news='.$id.' GROUP BY news');
Mais ça ne donnait rien.

Le var_dump me donne ça :

Code : Tout sélectionner

array(2) { ["news"]=> string(2) "10" ["moyenne"]=> string(6) "4.0000" }
non pas avec la clause WHERE. Avec WHERE tu restreins le résultat de la moyenne qu'à la seule $news associée à $id . Or il te faut une moyenne par news.Encore une fois procède au débogage du résultat et assures-toi que la requête fonctionne avec phpmyadmin.

Re: afficher note moyenne sql

Posté : 14 nov. 2013, 08:15
par Guillaume324
Il me semble qu'avec un GROUP par news, ça devrait fonctionner, pourtant j'ai un message d'erreur.
$retour_messages=$cnx->query('SELECT AVG(note) AS moyenne FROM '.$prefixe.'_comments GROUP BY news ORDER BY id DESC LIMIT');
Fatal error: Call to a member function fetch() on a non-object in /home/a3347974/public_html/en/comments/index.php on line 45

Re: afficher note moyenne sql

Posté : 14 nov. 2013, 08:25
par Guillaume324
Ah, j'avais oublié d'enlever le LIMIT, d'où l'erreur.
Mais ça ne m'affiche toujours pas la moyenne pour chaque news !

Re: afficher note moyenne sql

Posté : 14 nov. 2013, 10:12
par Guillaume324
Je poste la solution :
$retour_messages=$cnx->query("SELECT news, AVG(note) AS moyenne FROM ".$prefixe."_comments WHERE news=".$id."");

Re: afficher note moyenne sql

Posté : 14 nov. 2013, 12:41
par yann18
cette requête est bonne, elle te calcule la moyenne pour chaque news:
$retour_messages=$cnx->query('SELECT news, AVG(note) AS moyenne FROM '.$prefixe.'_comments GROUP BY news');
Ah, j'avais oublié d'enlever le LIMIT, d'où l'erreur.
Mais ça ne m'affiche toujours pas la moyenne pour chaque news !
La table doit avoir au moins plusieurs lignes de news identiques pour pouvoir les grouper.Maintenant je connais ni la structure de la table encore moins les enregistrements qu'elle contient donc je ne pourrai pas te dire exactement pourquoi ça ne marche .