Classement avec clause AVG
Pipol
-
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:
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
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
-
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 ? -
-
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';
-
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)?