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 sur 2 tables et 3 champs en appelant 2 x la même table.


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut Jointure sur 2 tables et 3 champs en appelant 2 x la même table.
    Bonjour à tous,

    Voici le sujet. J'ai simplifié à l'extrême en supprimant tout le superflu:

    table PROGRAM ref, event_txt
    table CALENDAR ref, ref_2, event_date
    Il s'agit de manifestations culturelles en français (ref = m%fr ) ou en anglais (ref = m%en). Le nom de la manifestation (event_txt) est en français ou en anglais., avec la ref correspondante (ref = m%fr ou ref = m%en).
    Certaines sont bilingues et ont donc deux ref: (ref = m%fr) et (ref_2 = m%en) dans la table CALENDAR. Sinon, ref_2 reste vide.

    Je souhaite obtenir la liste de toutes les manifestations en anglais ayant par conséquent m%en comme ref ou comme ref_2

    Voici la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT event_date, event_txt, program.ref, calendar.ref, ref_2 
    FROM calendar
    LEFT JOIN program ON program.ref = calendar.ref
    LEFT JOIN program AS program_2 ON program_2.ref = ref_2
    WHERE calendar.ref LIKE \'m%en\' OR ref_2 LIKE \'m%en\'
    pour obtenir le résultat:
    event_date, event_txt
    Le résultat est correctement trié et affiché selon les conditions du WHERE, tous les event_txt sont en anglais, sauf ceux associés à ref_2, qui s'affichent en français, ce qui bien sûr n'est pas correct. Vous l'avez compris, ce sont les manifestations bilingues et le deuxième LEFTJOIN qui posent problème.

    Dans une autre requête, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN program ON program.ref = ref_2
    qui fonctionne parfaitement.

    J'ai tourné le problème dans tous les sens... pour cette requête plutôt simple et classique et j'ai donc désormais besoin d'un regard extérieur.

    Merci à l'avance de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    Pour quoi ne pas simplement prendre les reférences anglaises dans PROGRAM, sans te soucier qu'elles aient un équivalent français ou non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT event_date, event_txt, program.ref, calendar.ref, ref_2
    FROM program P
      INNER JOIN calendar C on P.ref IN (C.ref, C.ref_2)
    WHERE P.ref LIKE 'm%en'

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 15
    Par défaut
    Merci ANTOUN. J'ai juste modifié program.ref et calendar.ref en p.ref et c.ref dans le SELECT pour éviter le message d'erreur "unknown table "calendar" (ou "program") in field list". Tout fonctionne à merveille.
    Encore une fois un grand merci à toi pour ton aide précieuse. Le sujet est donc réglé.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 30/01/2014, 12h59
  2. Réponses: 0
    Dernier message: 19/10/2012, 10h01
  3. Réponses: 2
    Dernier message: 04/01/2010, 10h02
  4. dans une même table, recopier un champ
    Par Dendrite dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/12/2008, 13h02
  5. 2 champs père et fils dans la même table
    Par titomiss dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2007, 16h18

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