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

Requêtes MySQL Discussion :

Jointure avec un COUNT()


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut Jointure avec un COUNT()
    Tout d'abord, bonne année, bonne santé et tous mes vœux de bonheur pour cette année 2007.

    Je programme donc en PHP depuis quelques années déjà, et je n'ai toujours eu que de simple requête à utiliser, et quand un problème ce posait, plutôt que chercher à résoudre le problème "proprement", je créais une nouvelle requête.

    Malheureusement, ou heureusement, j'ai eu envi de faire un site le plus propre possible, tant au côté esthétique qu'au niveau du code ...

    Maintenant entrons, si vous le voulez bien, dans le vif du sujet : mon problème.

    Quel est-il ? J'aimerai pouvoir faire une jointure, (ce que je faisais habituellement avec un `WHERE tablea.champx = tableb.champz`) et que je viens de modifier après avoir vu les meilleurs options (via la FAQ) quand à l'optimisation de cette requête, accompagné d'un COUNT() pour compter le nombre de ligne de ma table b ayant en commun un même sujet de la table a.

    Je ne sais pas si c'est assez clair, je vous met donc mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.id_n, a.auteur, a.titre, a.type, a.news, a.date, a.maj
    FROM news_tbl a
    INNER JOIN commentaire_tbl b ON a.id_n = b.n_id
    ORDER BY a.id_n DESC
    Donc ceci fonctionne très bien, mais la jointure ne sert à rien puisque je ne vais pas chercher l'information dont j'ai besoin dans la seconde table.

    Maintenant j'ai donc voulu compter le nombre de commentaire (j'ai créé une colonne pour tester) de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.id_n, a.auteur, a.titre, a.type, a.news, a.date, a.maj, count(b.nb_com)
    FROM news_tbl a
    INNER JOIN commentaire_tbl b ON a.id_n = b.n_id
    ORDER BY a.id_n DESC
    Et là, comme je pouvais m'y attendre, cela ne fonctionne pas du tout :').

    C'est pour cela que je requière votre aide.

    Merci d'avance,
    Amicalement SpiritOfDoc.

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 130
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    essai d'ajouter un group by...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT a.id_n, a.auteur, a.titre, a.type, a.news, a.date, a.maj, count(b.nb_com)
    FROM news_tbl a
    INNER JOIN commentaire_tbl b ON a.id_n = b.n_id
    GROUP BY b.n_id
    ORDER BY a.id_n DESC

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Merci de cette réponse rapide

    Mon problème est résolu, mais si possible, pourrais-je avoir une explication sur l'utilisation de ce GROUP BY ?

    Merci d'avance.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Bonjour, bonnée année et meilleurs voeux à toi également.

    Tu as s'en doute oublier un group by

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.id_n, a.auteur, a.titre, a.type, a.news, a.date, a.maj, count(b.nb_com)
    FROM news_tbl a
    INNER JOIN commentaire_tbl b ON a.id_n = b.n_id
    Group by a.id_n, a.auteur, a.titre, a.type, a.news, a.date, a.maj
    ORDER BY a.id_n DESC
    [Edit] un peu trop long à écrire [/Edit]

    Voila un lien pour avoir des informations sur le group by
    http://access.developpez.com/sql/#L1.2.1

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    Par défaut
    Encore merci

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 130
    Points : 58
    Points
    58
    Par défaut
    de rien...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    N'oublie pas le résolu

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    J'ai un problème similaire

    Je tente une requête pour développer un petit script perso pour DotClear2.
    L'objectif est de ressortir les X articles qui ont été le plus commenté durant la semaine.
    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT `post_title`
    FROM `dc_post` , `dc_comment`
    WHERE `comment_dt` > '2007-01-10 00:00:01'
    AND `comment_status` = '1'
    GROUP BY `post_id.dc_comment`
    ORDER BY count( `post_id.dc_comment` ) DESC
    LIMIT 0 , 3
    MySQL a répondu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'post_id.dc_comment' in 'order clause'
    Le plus étonnant, c'est que ça couille au niveau du count(post_id.dc_comment), alors que la ligne précédente ne retourne pas d'erreur...

    Une idée? Parce que là, je sèche... Merci!

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

Discussions similaires

  1. Jointure LEFT JOIN avec Double COUNT
    Par Mike91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2015, 12h37
  2. Jointure avec COUNT(*)
    Par dev14 dans le forum Requêtes
    Réponses: 6
    Dernier message: 26/12/2013, 16h21
  3. De l'aide pour Jointure, avec selection count =0
    Par onemart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/01/2009, 09h01
  4. [MySQL] Jointure avec count()
    Par iwf-fr dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/03/2008, 18h08
  5. [MySQL 4.1] Count sur jointure avec null
    Par Arnard dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/07/2007, 09h38

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