Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MISE ÀJOUR - RÉSOLU] Requête SELECT + COUNT()

    14 septembre 2011 à 22:38:29

    Bonjour,

    Je cherche à faire une requête qui me sélectionne les infos des articles (titre, contenu, date, etc.) ET qui compte le nombre de commentaires qu'ont chaque news.

    J'ai essayé en faisant ça :

    SELECT id_news, titre_news, COUNT(id_commentaire) AS nb_commentaires
    FROM table_news
    JOIN table_commentaires
    ON idx_news = id_news
    


    Sauf que malheureusement ça ne fonctionne pas... Il n'y a qu'un article qui s'affiche. :(

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2011 à 22:39:50

      Une jointure interne (INNER JOIN ou JOIN simplement) lie les lignes uniquement si une correspondance existe, ce qui n'est évidemment pas le cas d'un article sans commentaires. Remplace donc JOIN par LEFT OUTER JOIN (ou LEFT JOIN).
      • Partager sur Facebook
      • Partager sur Twitter
        14 septembre 2011 à 22:42:32

        J'ai essayé, mais ça ne marche toujours pas. Maintenant c'est un autre article qui s'est affiché par contre...
        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2011 à 22:46:12

          Désolé, j'ai lu trop vite.

          Tu dois rajouter une clause GROUP BY dans ta requête. COUNT() est une fonction d'agrégat, sans GROUP BY elle ne retourne qu'une seule ligne. Un SGBDR mieux pensé que MySQL n'aurait même pas toléré ta requête, qui n'a pas de sens. Bref, la requête finale devrait ressembler à ceci :
          SELECT id_news, titre_news, COUNT(id_commentaire) AS nb_commentaires
          FROM table_news
          LEFT OUTER JOIN table_commentaires
              ON idx_news = id_news
          GROUP BY id_news, titre_news;
          
          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2011 à 22:50:35

            C'est déjà mieux : maintenant tous les articles ayant un commentaire s'affichent mais ceux qui n'en ont pas n'apparaissent tjrs pas. :/
            • Partager sur Facebook
            • Partager sur Twitter
              14 septembre 2011 à 22:51:21

              Tu n'as pas fait une jointure externe, apparemment.
              • Partager sur Facebook
              • Partager sur Twitter
                14 septembre 2011 à 22:52:23

                J'ai utilisé le code que tu m'as fourni en tout cas... Après s'il y a autre chose à faire, non je ne l'ai pas fait ? :p

                EDIT : Milles excuses de ma part ! Je me suis lamentablement loupé en copiant ce que tu as écrit. Ça fonctionne parfaitement, je te remercie ! :D

                Et encore désolé. x)
                • Partager sur Facebook
                • Partager sur Twitter

                [MISE ÀJOUR - RÉSOLU] Requête SELECT + COUNT()

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown