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 entre 3 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut Jointure entre 3 tables
    Bonjour, j'ai un problème au niveau de l'extraction de quelque données et je ne sais pas comment faire parce que je n'ai jamais su faire des jointures , voici mes tables et leurs contenu , je voudrais afficher les guichets qui correspondent a la délégation dèjà choisie dans une liste déroulante alors la structure de mes tables est la suivante:

    Table guichets:agc_cod;guichet_cod; poste; etat_guichet
    Table agences: agc_cod; agc_lib; ref_dlg
    Table delegations:ref_dlg; lib_dlg;vil_cod;tel_fac;adr_dlg

    j'ai une liste déroulante qui affiche les délégations et en cliquant sur l'une des délégations je voudrai que les guichets qui correspondent aux agences qui correspondent aux délégations s'affiche dans une autre liste déroulante. je peux trouver de l'aide ici ?

    Merci d'avance

  2. #2
    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
    je n'ai jamais su faire des jointures
    Pour apprendre, c'est par là !

    D'après vos tables, le schéma est le suivant :
    guichet -1,1----situer----0,n- agence -1,1----comprendre----0,n- delegation

    Il suffit d'enchaîner les jointures dans cet ordre, l'une derrière l'autre.

    Essayez ; ce n'est pas compliqué.
    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 !

  3. #3
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Pour apprendre, c'est par là !

    D'après vos tables, le schéma est le suivant :
    guichet -1,1----situer----0,n- agence -1,1----comprendre----0,n- delegation

    Il suffit d'enchaîner les jointures dans cet ordre, l'une derrière l'autre.

    Essayez ; ce n'est pas compliqué.
    Merci mais j'ai dèjà vu ce cours j'ai pas compris comment procéder dans mon cas car moi je ne veux obtenir qu'un seul résultat alors que sur le cours les exemples sont un peu différents et le résultat obtenu n'est pas compréhensible, je suis perdu :/

  4. #4
    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
    je voudrais afficher les guichets qui correspondent a la délégation déjà choisie dans une liste déroulante
    OK, allons-y par étapes...

    Remarque préalable : vous devriez nommer vos tables au singulier.

    1)
    je voudrais afficher les guichets
    On va tout de suite mettre un alias à la table guichets parce qu'on en aura besoin pour la suite, même si c'est inutile à cette étape. Les alias facilitent l'écriture de la requête quand on met en jeu plusieurs tables, et même la lecture ensuite de la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    Ça, c'était basique !

    2)
    qui correspondent a la délégation déjà choisie dans une liste déroulante
    Problème : il n'y a pas de référence directe à la délégation dans la table guichets.

    Reprenons le schéma que j'ai donné plus haut :
    Citation Envoyé par CinéPhil
    guichet -1,1----situer----0,n- agence -1,1----comprendre----0,n- delegation
    On voit facilement qu'on peut avoir la délégation correspondant au guichet en faisant une jointure entre guichets et agences puis une autre entre agences et délégations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    	INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg
    Simple, non ?

    Et puisqu'on ne veut que les guichets de la délégation choisie, on ajoute une condition de restriction avec la clause WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    	INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg
    WHERE d.lib_dlg = :libelle_delegation_choisie
    Si votre application stocke en paramètre de la liste déroulante l'identifiant de la délégation, vous n'avez même pas besoin de la seconde jointure puisque cet identifiant se trouve dans la table agences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    WHERE a.ref_dlg = :reference_delegation_choisie
    Compris le principe et la méthode ?
    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 !

  5. #5
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    OK, allons-y par étapes...

    Remarque préalable : vous devriez nommer vos tables au singulier.

    1)

    On va tout de suite mettre un alias à la table guichets parce qu'on en aura besoin pour la suite, même si c'est inutile à cette étape. Les alias facilitent l'écriture de la requête quand on met en jeu plusieurs tables, et même la lecture ensuite de la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    Ça, c'était basique !

    2)

    Problème : il n'y a pas de référence directe à la délégation dans la table guichets.

    Reprenons le schéma que j'ai donné plus haut :

    On voit facilement qu'on peut avoir la délégation correspondant au guichet en faisant une jointure entre guichets et agences puis une autre entre agences et délégations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    	INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg
    Simple, non ?

    Et puisqu'on ne veut que les guichets de la délégation choisie, on ajoute une condition de restriction avec la clause WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    	INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg
    WHERE d.lib_dlg = :libelle_delegation_choisie
    Si votre application stocke en paramètre de la liste déroulante l'identifiant de la délégation, vous n'avez même pas besoin de la seconde jointure puisque cet identifiant se trouve dans la table agences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT g.guichet_cod, g.poste, g.etat_guichet
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    WHERE a.ref_dlg = :reference_delegation_choisie
    Compris le principe et lé méthode ?

    Merci Beaucoup, ça ma trop aidé et j'ai compris maintenant ce qu'il fallait faire

  6. #6
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    CinePhil
    je comprend pas pourquoi mais le champs lib_dlg ne se récupère pas j'ai essayer toute les notations pour le récuperer mais le résultat reste toujours vide

    même quand je fais SELECT * FROM delegations WHERE lib_dlg="reference du lib_dlg sur la table"
    ca me retourne toujours un résultat vide comme si il ne reconnait pas la condition !!! est ce qu'il ya une écriture spéciale pour récuperé un champ CHAR ?

  7. #7
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    je l'ai résolu il fallait mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.guichet_cod
    FROM guichets g
    INNER JOIN agences a ON a.agc_cod = g.agc_cod
    INNER JOIN delegations d ON d.ref_dlg = a.ref_dlg
    WHERE d.lib_dlg LIKE  '%Siege%'

  8. #8
    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
    Si le nom de la délégation n'est pas exactement 'Siège', effectivement, vous devez utiliser LIKE.

    Ce qui m'étonne quand même :
    je voudrais afficher les guichets qui correspondent a la délégation dèjà choisie dans une liste déroulante
    Puisque vous avez une liste déroulante, vous avez donc le libéllé exact et peut-être même, associé au libellé, l'identifiant de la délégation. Je ne vois donc pas l'utilité du LIKE.
    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 !

  9. #9
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Si le nom de la délégation n'est pas exactement 'Siège', effectivement, vous devez utiliser LIKE.

    Ce qui m'étonne quand même :

    Puisque vous avez une liste déroulante, vous avez donc le libéllé exact et peut-être même, associé au libellé, l'identifiant de la délégation. Je ne vois donc pas l'utilité du LIKE.
    le Like c'était pour le Test sur la Base je l'ai pas encore implémenté sur la liste déroulante

Discussions similaires

  1. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  2. Jointure entre 3 tables
    Par zigune dans le forum Langage SQL
    Réponses: 9
    Dernier message: 15/11/2004, 16h04
  3. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50
  4. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03
  5. Jointure entre 2 tables et OR
    Par PyRoFlo dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/02/2004, 18h42

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