Classer champs identiques

Résolu/Fermé
eBryde - 16 févr. 2010 à 14:36
Blocks Messages postés 98 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 31 janvier 2011 - 16 févr. 2010 à 22:16
Bonjour,
Je voudrais que les articles sur mon site se classe par nombre de commentaires qu'ils possèdent. Les plus commentés en premier. J'ai fait des recherches et il semble qu'il faille utiliser un GROUP BY ( ? ) Seulement je ne connais pas cette clause et par conséquent je ne parviens pas à ce que je veux...

Dans ma table commentaires_stats, chaque commentaire possède un id propre et un id_stats qui correspond à l'article auquel correspond le commentaire. La table qui contient les articles s'appelle stats.

Pourriez vous m'aiguillez ? Merci beaucoup...

4 réponses

Blocks Messages postés 98 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 31 janvier 2011 3
16 févr. 2010 à 14:46
Perso j'aurais peut-être mis un champ dans la table des articles du style : nbrcommentaire
Tu pourrais l'incrémenter de 1 à chaque commentaire ajouté.
Ca permettrais de pas mal simplifier les choses, puis au moins tu pourrais mettre un truc tout simple :

Article sur la vache qui rit (16 commentaires)
0
Merci pour ta réponse Blocks,

Je suis déjà parvenu à mettre le nombre de commentaire par article grâce à cette requête :

$nombre_coms = mysql_query('SELECT COUNT(*) AS nb_coms FROM commentaires_stats WHERE id_stats ="'.$donnees['id'].'"');

Que j'utilise à l'intérieur de la boucle qui affiche tous les articles... N'y aurait-il pas une solution sans ajouter de champ nbrcommenaire, avec un GROUP BY, pour classer par ordre decroissant ces groupes de id_stats identiques ?
En effet ajouter un champ ne m'arrange pas tellement étant donné que j'ai déjà pas mal de commentaires... =S
0
Blocks Messages postés 98 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 31 janvier 2011 3
16 févr. 2010 à 15:27
Si tu ajoutes un champ, ce serait dans la table articles et non dans commentaires
De plus, ajouter un champ (si je ne me trompe pas), ca ne modifie pas les données que tu as déjà dans ta base.

Donc moi je ferais :
ajouter dans articles nbrcommentaires

$id_article = Array();
$requete = "SELECT * FROM articles";
$retour = mysql_query($requete);
while($donnes= mysql_fetch_array($retour)) {
$id_article[] = $donnes["id"];
}
// là j'ai récupéré tous les id des articles
foreach($id_article as $id) {
$requete = "SELECT COUNT(*) AS nbrcommentaire FROM commentaire WHERE `id_stat`=$id";
$retour = mysql_query($requete);
$donnees = mysql_fetch_array($retour);
$nbrcommentaire = $donnes["nbrcommentaire"];

$requete = "UPDATE article SET `nbrcommentaire`=$nbrcommentaire WHERE `id`=$id";
mysql_query($requete);
}
// là je remplis tous les champs nbrcommentaire dans la table article

Ca tu le fais une fois, puis après quand tu veux rajouter un commentaire, tu dis :
-> Va chercher nbrcommentaire dans l'article du commentaire
-> Le nombre de commentaire++
-> Met le nouveau nombre de commentaire dans article

Voili voulou, j'espère ne pas m'être trompé, et puis à part pour ma méthode je vois pas comment faire avec autre chose :/
0
C'est parfait Blocks, j'ai fait tout ce que tu m'as conseillé et ça marche nickel. Je pense effectivement que c'était la meilleure solution. Un immense merci !
0
Blocks Messages postés 98 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 31 janvier 2011 3
16 févr. 2010 à 22:16
Mouarf de rien =)
0