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 :

Pb de jointure (traductions de libellés)


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut Pb de jointure (traductions de libellés)
    Bonjour,

    j'ai 2 tables pour stocker des libellés dans plusieurs langues :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    table LIBELLE:
    id primary key
    name char(32)
     
    table TRADUCTION:
    id primary key
    libelle_id foreign key references(libelle.id) on delete cascade
    lang char(8)
    result char(32)

    Par défaut tous les libelles sont crées dans la table LIBELLE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into LIBELLE values (NULL, 'a');
    insert into LIBELLE values (NULL, 'beautifull');
    insert into LIBELLE values (NULL, 'girl');
    Le libelle par défaut existe toujours.

    Mais ils peuvent avoir des traductions dans différentes langues dans la table TRADUCTION.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into TRADUCTION values (NULL, 1, 'fra', 'une');
    insert into TRADUCTION values (NULL, 2, 'fra', 'jolie');
    insert into TRADUCTION values (NULL, 3, 'esp', 'chica');
    Ma question :
    comment récupérer les libéllés dans une langue choisie, et s'il n'y a pas de traduction renvoyer le libellé de base ?

    les requêtes du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM LIBELLE L
    LEFT JOIN TRADUCTION T ON L.ID=T.LIBELLE_ID
    WHERE T.LANG='fra' OR T.LANG IS NULL;
    ne donnent pas les bons résultats.

    Merci par avance.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *, COALESCE(T.result, L.name) 
    FROM LIBELLE L
    LEFT JOIN TRADUCTION T ON L.ID=T.LIBELLE_ID AND T.LANG='fra' ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    Merci pour ta réponse et le COALESCE, que je ne connaissais pas !

    Je ne savais pas non plus que l'on pouvait spécifier le :
    dans la clause JOIN.
    Cela n'a pas le même effet que rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE T.LANG='fra' OR T.ID IS NULL;
    Et c'est surtout ce point-là qui résoud mon problème ...

    @+

Discussions similaires

  1. [2008R2] Traduction libellé statique Me.Name
    Par stephane.net dans le forum SSRS
    Réponses: 0
    Dernier message: 04/02/2012, 10h13
  2. [MessageBox] et traduction libellé des boutons
    Par Droïde Système7 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/08/2010, 20h04
  3. Traduction
    Par PierDIDI dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/09/2002, 00h43
  4. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 11h29
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 13h51

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