Forum Clubic

Module articles les plus commentés en php

Bonjour, donc voila comme précisé dans le titre je suis entrain de faire un module qui classe mes articles en fonction du nombre de commentaire.

Pour cela j’ai une table “article” ou chaque article ajouté prend un certain id
et une seconde table “comment” ou chaque commentaire ajouté prend un id et en plus de ca prend l’id de l’article via un formulaire donc de colonne essentiel : id et id_art.

J’ai réussi à récupérer dans un tableau associatif le nombre de commentaire selon les article grace à ce bout de code:

<?php include('connexion.php'); $[/contents/sql/sqlintro.php3 sql] = "[/contents/sql/sqlsel.php3 SELECT] id_art FROM comment"; $result = mysql_query($sql); while($donnees = mysql_fetch_array($result)) { $tbl_comment[] = $donnees['id_art']; } $tbl_comment = array_unique($tbl_comment); print_r($tbl_comment); echo '
'; $max = max($tbl_comment); echo $max; echo '
'; for($i=0 ; $i<=$max ; $i++) { $sql = "SELECT id FROM comment WHERE id_art = $i"; $result = mysql_query($sql); if(mysql_num_rows($result)>0) { $req = "SELECT COUNT(*) AS id FROM comment WHERE id_art = $i"; $result = mysql_query($req); while($donnees = mysql_fetch_array($result)) { $class_plus_comment[$i] = $donnees['id']; } } } print_r($class_plus_comment); ?>

Avec ca j’obtiens : Array ( [2] => 6 [3] => 1 [4] => 2 [11] => 2 )

Donc entre crochet c’est le numéro de l’article et ensuite c’est le nombre de commentaire associé à cette article.
Donc ce que j’aimerais maintenant c’est classé le nombre de commentaire en ordre décroissant ( ca je sais le faire ) mais le probleme c’est que le nombre entre crochet ne suis pas. Je m’explique j’obtiens un nouveau tableau:
Array ( [0] => 6 [1] => 2 [2] => 2 [3] =>1 )

On peut voir que le nombre de commentaire a été classé mais que le numéro de l’article associé n’y est lpus Or moi j’aimerais obtenir ca: Array ( [2] => 6 [4] =>2 [11] => 2 [3] => 1 )
En considérant qu’il y aurait beaucoup plus de commentaire sur beaucoup plus d’article , je pensais récupéré les 5 premiers afin d’afficher le titre de l’article.

Si c’est un peu confus je m’en excuse mais je crois que c’est justement pour ca que je n’y arrive pas.

Donc je résume mes problèmes:
***Classer le tableau par ordre décroissant le nombre de commentaire tout en faisant en sorte que l’id de l’article suive le classement.
( Une fois fais, je pense que récupéré les 5 premières valeur dans un nouveau tableau ne devrait pas être difficile )
***Récupérer le résultat en faisant une boucle, je pense, de ce style la:
Récupération des premières valeurs: [2] => 6
- $sql = “SELECT * FROM article WHERE id=2”;

Suivant : [4] => 2
- … [/contents/sql/sqlrestr.php3 WHERE] id=4
Etc…

J’espere que vous quelqu’un sera en mesure de résoudre mon problème.
Merci d’avance.
PS: Si vous avez des chose à redire sur le début du code n’hésitez pas.

Salut,

si j'ai bien compris, il te suffit juste de faire une requête SQL avec un INNER JOIN :

SELECT * FROM articles INNER JOIN comment ON comment.article_id = articles.id ORDER BY id, comment.nb_commentaire

Je pense qu’un truc comme ça devrait te permettre d’afficher tes résultats dans l’ordre voulu. Fais des essais dans PhpMyAdmin, en adaptant le nom de tes tables bien sur.

Bonjour tout d’abord je tenais a te remercier de ta réponse.
Voila sur un autre forum on m’a conseillé de mettre ca:

if(mysql_num_rows($result)>0)
{
$req = “SELECT article.contenu, article.titre, article.auteur, id_art, COUNT() FROM comment, article WHERE article.id = comment.id_art GROUP BY id_art ORDER BY COUNT() DESC LIMIT 5”;
$result = mysql_query($req) or die(mysql_error());
while($donnees = mysql_fetch_array($result))
{
echo ‘’.$donnees[‘titre’].’ est classé dans les 5 premiers

’;
}
}

Chose que j’ai faite mais voila ca fonctionne PRESQUE disons.
Ca me donne bien les 5 titre les plus classé mais la liste est répété 6 fois par contre.
C’est a dire qu’au lieu d’avoir seulement :
1er titre (le plus commenté )
2eme titre
3eme titre
4eme titre
5eme titre.

j’ai :
1er titre (le plus commenté )
2eme titre
3eme titre
4eme titre
5eme titre.

1er titre (le plus commenté )
2eme titre
3eme titre
4eme titre
5eme titre.

6 groupe de 5

La seul fois ou apparait 6 c’est le nombre de commentaire qu’a l’article le plus commenté. Donc j’ai vérifié ca et j’ai rajouté un commentaire mais ca le vérifie pas , y a toujours 6 groupe.
Si tu vois d’ou ca vien n’hésite pas stp

T’as pas surtout par hasard 6 article d’enregistré dans ta base…?