IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Count commentaires ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 56
    Points
    56
    Par défaut Count commentaires ?
    Bonjour à tous,

    avant de poser la question, je vais décrire la situation ...

    J'ai 2 tables :
    - articles, qui contient des articles.
    - commentaires, qui contient des commentaires. Chaque commentaire est lié à un article.

    J'aimerais afficher sur ma page d'accueil la liste des articles et le nombre de commentaires associés.

    J'arrive à le faire mais en autant de requêtes qu'il y a d'articles ... pas génial.

    J'aimerais réaliser cela en 1 seule requête. J'y arrive presque mais les articles pour lesquels il n'y a pas de commentaire ne sont pas affichés ... Est-il possible de le faire en 1 coup ? Quelqu'un a-t-il une solution ?

    D'avance, je vous remercie.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 56
    Points
    56
    Par défaut
    Parfois, il suffit de poser la question pour trouver une réponse ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CASE WHEN c.fk_article IS NULL 
             THEN 0 
           ELSE 
             COUNT(a.id_article) 
           END AS COUNT
         , titre
         , a.id_article
    FROM article a
      LEFT JOIN commentaires c 
        ON a.id_article = c.fk_article
    GROUP BY a.id_article
    Y a-t-il une façon plus propre de faire cela ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
        a.id_article,
        a.titre,
        count(c.fk_article) as COUNT
    FROM
        article a
        LEFT JOIN commentaires c 
          ON a.id_article = c.fk_article
    GROUP BY
        a.id_article,
        a.titre

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 56
    Points
    56
    Par défaut
    La nuance est subtile mais elle fait toute la différence ;-)

    Aurais-je en plus droit à un bref mot d'explication ?

    Merci.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Qu'est-ce que tu ne comprends pas ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    La différence ?
    C'est d'une part que normalement, toute colonne que tu ne mets pas dans le group by, ne peut être utilisée dans le SELECT sauf dans une fonction d'aggrégat.
    Simplement parce que GROUP BY "Choses", veut dire que pour une valeur de "Choses", tu ne veux qu'une ligne, et que par conséquent demander la valeur d'une colonne en dehors de "Choses" n'a pas vraiment de sens.
    (Même s'il paraît que des SGBD le permettent et en font une interprètation particulière).

    Deuxième petit point :
    Il n'y a qu'une seule différence entre count(*), count(colonne) (et count(expression) de manière générale) : count(quelquechose) ne compte que les occurences non null de "quelquechose"

    Voilà voilà...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remerciements, propositions et commentaires
    Par HCath dans le forum Discussions diverses
    Réponses: 57
    Dernier message: 24/08/2006, 10h22
  2. [VB6] mettre en commentaires...
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/04/2004, 15h15
  3. [VB6] - Mettre un morceau de ligne en commentaire
    Par inotna2099 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 11h03
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo