Classement avec clause AVG

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

4 réponses

  1. 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
    1. Bonjour neoprog,

      Merci de ton aide,
      Oui c'est le topic_id

      Il faut donc faire une jointure?
      0
      1. 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
        1. 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