Classement avec clause AVG

Fermé
Pipol - 14 juin 2011 à 15:05
 Pipol - 14 juin 2011 à 16:06
Bonjour,

Bonjour,

Je souhaite faire la moyenne des notes attribuées aux topics de mon forum, et faire un classement de ces topics, du mieux noté au moins bien noté

Je passe donc par une requête sql, mais j'ai un problème, je ne sais pas comment faire la moyenne des notes de chaque topic, et non pas la moyenne des notes de tous les topics

Voilà ma requête:

$forum_id = '1299';
$sql = 'SELECT t.*, tt.*, AVG(evaluation) AS Moyenne
                FROM
                ' . TOPICS_EVALUATION_TABLE . ' AS t,
                ' . TOPICS_TABLE . ' As tt
                WHERE tt.forum_id IN (' . $forum_id . ')
                GROUP BY tt.topic_id
                ORDER BY Moyenne DESC
                LIMIT 10';

$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
                $template->assign_block_vars('eval', array(
                        'TITLE' => $row['topic_title'],
                        'MOY' => $row['Moyenne'],
                ));
}
$db->sql_freeresult($result);




J'obtiens la liste des topics du forum voulu, mais tous accompagnés de la moyenne de toutes les notes de tous les topics

Savez-vous comment appliquer la clause AVG à chaque topic?
Merci d'avance

A voir également:

4 réponses

Utilisateur anonyme
14 juin 2011 à 15:20
Bonjour,

C'est normal, vous faites une jointure sans clef de jointure
Quel est le lien, champ en commun, clef, primaire et secondaire, entre les tables TOPICS_EVALUATION_TABLE et TOPICS_TABLE, je suppose que c'est un champ topic_id ?
0
Bonjour neoprog,

Merci de ton aide,
Oui c'est le topic_id

Il faut donc faire une jointure?
0
Utilisateur anonyme
14 juin 2011 à 15:58
Oui, il faut faire une jointure sur les deux tables, sans doute comme ceci

SELECT
t.*, tt.*, AVG(evaluation) AS Moyenne
FROM
' . TOPICS_EVALUATION_TABLE . ' AS t,
' . TOPICS_TABLE . ' As tt
WHERE
tt.topic_id = t.topic_id
AND
tt.forum_id IN (' . $forum_id . ')
GROUP BY
tt.topic_id
ORDER BY
Moyenne DESC
LIMIT 10';

0
Ca marche parfaitement, merci neoprog pour ton aide précieuse ;)

Une dernière petite question, sais-tu comment je pourrais afficher dans chaque topic, le rang de ce topic? (par exemple le topic A est classé 3ème, affiché donc dans le topic A: 3ème sur X autres topics)?
0