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 :

petit problème avec un COUNT()


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut petit problème avec un COUNT()
    Bonjour,

    J'ai 3 tables :

    habitation
    idhabitation INT AUTO_INCREMENT PRIMARY KEY

    personnes
    idpersonne INT AUTO_INCREMENT PRIMARY KEY,
    nom_personne TEXT

    animaux_compagnie
    idanimal INT AUTO_INCREMENT PRIMARY KEY,
    nom_aninal TEXT

    Je voudrais effectuer une requête renvoyant comme résultat :

    idhabitation, nom_personne, COUNT(idanimal) as nombre_animaux

    De manière à avoir
    idhabitation;nom_personne;nombre_animaux
    10;Pierre;2
    10;Sophie,1
    10;Vincent;0

    Sachant que COUNT(idanimal) dépend de idpersonne (et je voudrais juste les animaux dont le nom commence par 'B' par exemple).

    Je ne sais pas comment utiliser le COUNT vu que le ORDER BY pour les animaux dépendra uniquement de idpersonne.

    Sauriez-vous comment faire ceci ?

    En vous remerciant,

    C. Tobini

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Comment est fait le lien entre ces trois tables (clef étrangères) ?
    Je m'explique : par quels champs peut-on faire les jointures pour trouver qui habite où et dans quelle habitation ou à qui sont les animaux ?
    Ca va influer sur le code de la requête...

    ced

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Bonjour et merci de la réponse, j'aurais pu effectivement fournir directement l'info

    Et hop !

    habitation
    idhabitation INT AUTO_INCREMENT PRIMARY KEY

    1,n
    1,1

    personnes
    idpersonne INT AUTO_INCREMENT PRIMARY KEY,
    nom_personne TEXT,
    idhabitation INT FK habitation (idhabitation)

    1,n
    1,1

    animaux_compagnie
    idanimal INT AUTO_INCREMENT PRIMARY KEY,
    nom_aninal TEXT,
    idpersonne INT FK personnes (idpersonne)


    C. Tobini

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Citation Envoyé par ctobini Voir le message
    De manière à avoir
    idhabitation;nom_personne;nombre_animaux
    10;Pierre;2
    10;Sophie,1
    10;Vincent;0

    Sachant que COUNT(idanimal) dépend de idpersonne (et je voudrais juste les animaux dont le nom commence par 'B' par exemple).
    Pour obtenir ça, il va falloir mettre la condition sur le nom de l'animal dans la condition de jointure entre la table personnes et la table animaux_compagnie, sinon, en le mettant dans le where, ça ne renverra que les lignes pour lesquels on a au moins un animal avec un 'B' en début de nom.
    Ca donne donc quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select h.idhabitation, p.nom_personne, count(a.idanimal)
    from habitation h
    left join personnes p on h.idhabitation = p.idhabitation
    left join animaux_compagnie a on p.idpersonne = a.idpersonne and substr(a.nom_animal, 1, 1) = 'B'
    group by h.idhabitation, p.nom_personne
    Remarque : le premier LEFT JOIN entre habitation et personnes n'est pas obligatoire... Ca dépend du résultat souhaité.

    ced

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Yeah ! Super, ça marche très bien !

    Merci beaucoup et bonne soirée

    C. Tobini

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

Discussions similaires

  1. [PDO] Question + Petit probléme avec COUNT
    Par mohsenuss91 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/04/2013, 10h58
  2. Un petit problème avec pop
    Par Paulinho dans le forum C++
    Réponses: 4
    Dernier message: 13/11/2005, 20h57
  3. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 12h47
  4. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 18h45
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10

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