Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL]Requête imbriquée avec SELECT COUNT

    27 avril 2011 à 13:00:31

    Salut à tous !

    J'ai une page où je dois pouvoir trier mes résultats.
    Cette page liste les articles de mon site.

    Les informations concernant ces articles sont dans une table "blog".
    En revanche, les informations liées à leurs commentaires sont dans une table "commentaires", et celles liées à leurs appréciations sont dans une table "like_dislike".

    Pour obtenir le nombre de commentaires, je dois faire une requête du type :
    SELECT COUNT (*) AS nb_comm FROM commentaires WHERE article=:article
    


    Et pour obtenir le nombre de likes, je dois faire :
    SELECT COUNT (*) AS nb_likes FROM like_dislike WHERE like=true AND article=:article
    


    Donc pour afficher les résultats ça va, même si je sais que c'est pas optimisé (je fais ces 2 dernières requêtes dans la boucle qui affiche les résultats de la requête sur "blog"...).
    Mais quand il s'agit de trier les résultats en fonction du nombre de commentaires ou de likes, c'est une autre histoire...

    J'ai beaucoup de mal à faire une requête SQL dès que ça sort d'une utilisation courante, donc je suis un peu perdu là.

    J'ai imaginé faire ça :
    SELECT *, (SELECT COUNT (*) AS nb_comm FROM commentaires WHERE article=:article) FROM blog ORDER BY nb_comm DESC
    


    Mais ça ne fonctionne pas.

    Quelqu'un saurait m'aider ?
    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2011 à 13:03:12

      SELECT *, COUNT (*) AS nb_comm FROM commentaires GROUP BY article ORDER BY nb_comm
      


      C'est ça que tu veux ??
      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2011 à 14:13:52

        T'as deux solutions.

        Soit tu mets des colonnes nb_comm et nb_like dans ta table articles, mises à jour par trigger sur les tables de commentaires et de like... c'est valable si tes tables sont grosses et que le comptage des comms/likes est lent.

        Soit tu fais ça :

        SELECT a.*, count(c.article_id) AS nb_comms 
        FROM articles a
        LEFT JOIN commentaires c USING (article_id)
        GROUP BY article_id
        ORDER BY count(c.article_id) DESC
        


        Ça utilise le GROUP BY non-standard de MySQL.

        N'oublie par l'index sur commentaires( article_id, commentaire_id ), et le même sur la table de like.
        • Partager sur Facebook
        • Partager sur Twitter

        [SQL]Requête imbriquée avec 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