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 :

Aide pour requête


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Avatar de dam_moreyllo
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 251
    Points : 227
    Points
    227
    Par défaut Aide pour requête
    Bonjour !
    J'ai donc des problèmes pour construire une requête SQL. Je ne suis pas très doué en SQL, et vu qu'habituellement j'ai des requêtes assez simple à construire j'y arrive, mais là...
    Au cas où, je précise que j'utilise l'extension php mysql et donc la version 4.0 de mysql.

    Pour commencer, j'ai les tables suivantes (simplifiées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    entreprise :
    idEnt : INT auto_increment clé primaire
    nom : varchar
    ...
     
    jours :
    idEnt : INT clé primaire
    jour : INT clé primaire (de 0 à 6 pour les jours de la semaine)
    demiJournee : enum('matin', 'aprem') clé primaire
    ...
    Je pense que ces tables sont assez parlantes, je ne vais donc pas les détailler, à moins que vous me le demandiez.

    Ce que je veux obtenir de ces tables :
    Je voudrais savoir combien il y a d'entreprises qui ont au moins une ligne dans la table jours dont jour est égal à 3 par exemple.
    Précision : je suis obligé de joindre la table entreprises car je dois aussi filtrer sur des infos de celle-ci.

    J'ai essayé cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*) FROM entreprises e
                  LEFT OUTER JOIN jours j ON j.idEnt = e.idEnt
                  WHERE j.jour = 3
    Mais si il y a des entreprises qui ont par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    |-idEnt----jour----demiJournee-|
    |---1--------3--------matin----|
    |---1--------3--------aprem----|
    ben ça me compte l'entreprise 2 fois...

    Comment faire ?

    Merci d'avance !!

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Salut,

    En mettant un nom de colonne au lieu de * je suppose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(e.idEnt) FROM entreprises e
    LEFT JOIN jours j  ON j.idEnt = e.idEnt
    WHERE j.jour = 3
    Pourquoi 3 colonnes en primaire dans la table jours ?

  3. #3
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    J'espère que ça fonctionnera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT idEnt, count(*) FROM entreprise t1, jours t2
    WHERE t1.idEnt = t2.idEnt
    AND t2.jour = 3
    GROUP BY idEnt
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  4. #4
    Membre actif
    Avatar de dam_moreyllo
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 251
    Points : 227
    Points
    227
    Par défaut
    Merci Xunil tu m'a mis sur la voie !
    En fait c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(DISTINCT e.idEnt) FROM entreprises e
    LEFT JOIN jours j  ON j.idEnt = e.idEnt
    WHERE j.jour = 3
    Pour les 3 colonnes en clés primaires, c'est tout simplement parce qu'un idEnt ne peut avoir qu'une seule fois un même jour et une seule fois une même demiJournee.

    Merci !

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Ok, mais à ta place j'aurais opté pour un UNIQUE au lieu d'un PRIMARY KEY, avec une clef étrangère si ta table est en innodb.

    Je trouve étrange de mettre idEnt en primaire dans 2 tables.

  6. #6
    Membre actif
    Avatar de dam_moreyllo
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 251
    Points : 227
    Points
    227
    Par défaut
    C'est pas uniquement idEnt qui est clé primaire de la 2è table, c'est un "couple" de clés primaires formés par les 3 champs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRIMARY KEY (`idEnt`,`jour`,`demiJournee`)
    Et elles ne sont pas en innoDB.

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

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  2. [SQL] Aide pour requête
    Par portu dans le forum Access
    Réponses: 8
    Dernier message: 23/09/2005, 13h05
  3. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  4. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 20h18

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