Classer les résultats d'un count (2 tables)
Posté : 01 déc. 2007, 04:19
Bonjour chère communauté,
Après 3 jours de recherche sur tous les forums imaginables, je me résouds à vous soumettre mon problème...
J'ai un système de news qui permet aux membres de voter pour chaque news (vote positif, ou vote négatif), afin d'évaluer chaque news. Je voudrais faire un TOP 10 des news les mieux notées (celles qui ont le plus de votes positifs).
J'ai 2 tables dans ma base de données :
- une table "article" (les news) avec les valeurs suivantes : news_id, news_article
- une table "article_vote" avec les valeurs suivantes : vote_id, vote_idarticle (l'ID de l'article dans la table "article") et vote_result (si vote_result = 1 il s'agit d'un vote positif, si vote_result = 2 il s'agit d'un vote négatif).
Je me retrouve confrontée à un problème imprévu : je n'arrive pas à classer par ordre des news les mieux notées. Au mieux, j'obtiens les valeurs de chaque news, mais dans le désordre (les news bien notées, mal notées, et celles qui n'ont aucune note), le classement se fait par l'ID (news_id). Impossible de faire aparaître en premier les news les mieux notées. Depuis 3 jours, j'ai apris les UNION, les INNER, et autres jointures... Aussi les multi-SELECT, rien n'y fait, je bloque... Je ne vais pas non plus vous parler du GROUP BY que j'ai tenté en vain...
J'ai tenté 2 méthodes.
La méthode sale :
La méthode propre (ce que j'apprends depuis 3 jours) :
J'en ai déduit que pour pouvoir classer mes résultats dans un ordre prédéfini, il fallait combiner les 2 SELECT (la sélection de mes articles (pour récupérer l'ID), et le résultat de chaque article). En quelque sorte comme ma méthode sale de ci-dessus, mais dans une seule commande :
Si vous pouviez me donner un petit coup de pouce, en m'orientant plutôt vers la méthode propre (UNION), à moins que vous pensiez que ma méthode sale n'est pas si mal que ça finalement
(c'est en tout cas avec celle-ci que je me rapproche de ce que je souhaite).
D'avance merci
En espérant ne pas m'être trompée de forum.
PS : bien vu les smileys spécial Noël
Après 3 jours de recherche sur tous les forums imaginables, je me résouds à vous soumettre mon problème...
J'ai un système de news qui permet aux membres de voter pour chaque news (vote positif, ou vote négatif), afin d'évaluer chaque news. Je voudrais faire un TOP 10 des news les mieux notées (celles qui ont le plus de votes positifs).
J'ai 2 tables dans ma base de données :
- une table "article" (les news) avec les valeurs suivantes : news_id, news_article
- une table "article_vote" avec les valeurs suivantes : vote_id, vote_idarticle (l'ID de l'article dans la table "article") et vote_result (si vote_result = 1 il s'agit d'un vote positif, si vote_result = 2 il s'agit d'un vote négatif).
Je me retrouve confrontée à un problème imprévu : je n'arrive pas à classer par ordre des news les mieux notées. Au mieux, j'obtiens les valeurs de chaque news, mais dans le désordre (les news bien notées, mal notées, et celles qui n'ont aucune note), le classement se fait par l'ID (news_id). Impossible de faire aparaître en premier les news les mieux notées. Depuis 3 jours, j'ai apris les UNION, les INNER, et autres jointures... Aussi les multi-SELECT, rien n'y fait, je bloque... Je ne vais pas non plus vous parler du GROUP BY que j'ai tenté en vain...
J'ai tenté 2 méthodes.
La méthode sale :
// Je sélectionne toutes mes news
$sql_news="SELECT news_id FROM article";
$query_news=mysql_query($sql_news);
while($data_news=mysql_fetch_assoc($query_news))
{
// Je comptabilise le nombre de votes positifs de chaque news (valeur "1")
$sql_count="SELECT count(vote_result) FROM article_vote WHERE vote_idarticle='".$data_news['news_id']."' AND vote_result='1'";
$result_count=mysql_query($query) or die (mysql_error());
$count=mysql_fetch_array($result_count);
echo "Article : ".$data_news['news_article']." / Votes positifs : ".$count[0];
}
A noter que c'est avec cette méthode que je me rapproche de ce que je veux : j'obtiens les résultats positifs de chaque article, mais pas dans l'ordre des mieux notés.La méthode propre (ce que j'apprends depuis 3 jours) :
J'en ai déduit que pour pouvoir classer mes résultats dans un ordre prédéfini, il fallait combiner les 2 SELECT (la sélection de mes articles (pour récupérer l'ID), et le résultat de chaque article). En quelque sorte comme ma méthode sale de ci-dessus, mais dans une seule commande :
$query = "SELECT boite_id FROM boite UNION SELECT COUNT(boite_op_rep) from boite,boite_op where boite_op.boite_op_ididee=boite.boite_id AND boite_op.boite_op_rep='1'";
Mais ça me donné un résultat incohérent.Si vous pouviez me donner un petit coup de pouce, en m'orientant plutôt vers la méthode propre (UNION), à moins que vous pensiez que ma méthode sale n'est pas si mal que ça finalement
D'avance merci
PS : bien vu les smileys spécial Noël

qui s'affiche en haut à gauche de ce sujet