Classement avec clause AVG

Pipol -  
 Pipol -
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. Utilisateur anonyme
     
    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
  2. Pipol
     
    Bonjour neoprog,

    Merci de ton aide,
    Oui c'est le topic_id

    Il faut donc faire une jointure?
    0
  3. Utilisateur anonyme
     
    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
  4. Pipol
     
    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