afficher note moyenne sql

Guillaume324
Invité n'ayant pas de compte PHPfrance

13 nov. 2013, 09:32

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 !

Mammouth du PHP | 2278 Messages

13 nov. 2013, 10:01

Il faut peut être mettre du where là dedans...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 571 Messages

13 nov. 2013, 12:51

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

Guillaume324
Invité n'ayant pas de compte PHPfrance

13 nov. 2013, 18:48

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" }

Mammouth du PHP | 571 Messages

13 nov. 2013, 23:22

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.

Guillaume324
Invité n'ayant pas de compte PHPfrance

14 nov. 2013, 08:15

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

Guillaume324
Invité n'ayant pas de compte PHPfrance

14 nov. 2013, 08:25

Ah, j'avais oublié d'enlever le LIMIT, d'où l'erreur.
Mais ça ne m'affiche toujours pas la moyenne pour chaque news !

Guillaume324
Invité n'ayant pas de compte PHPfrance

14 nov. 2013, 10:12

Je poste la solution :
$retour_messages=$cnx->query("SELECT news, AVG(note) AS moyenne FROM ".$prefixe."_comments WHERE news=".$id."");

Mammouth du PHP | 571 Messages

14 nov. 2013, 12:41

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 .