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 :

Une base de données multilingue gérée avec des vues


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Une base de données multilingue gérée avec des vues
    Bonjour,

    Je suis en train de concevoir une structure de données pouvant accueillir mes data pour un projet Web.
    La problématique : le site doit être multilingue (Anglais - Français pour le moment et sûrement plus dans l'avenir).

    La structure globale de la base est assez grosse et je ne souhaite vraiment pas toucher à son intégrité.
    Afin de ne pas dupliquer mes champs ni mes tables, j'ai simplement pensé faire une table TRADUCTION qui serait composée des champs suivants :

    Id_TRAD (PK), TableConcerne_TRAD, ChampsConcerne_TRAD, IdChampsConcerne_TRAD, Lang_TRAD, Content_TRAD

    J'ai donc pensé faire une vue par table dans la langue choisie. Ex :
    TABLE1 aura une vue TABLE1_EN composée des mêmes champs, cependant la vue TABLE1_EN devra être composée à partir des tables TABLE1 et TRADUCTION.

    J'y suis presque mais la requête SELECT pour construire cette vue n'est pas évidente...

    J'ai tout d'abord essayé ça tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT `ESSAI_TABLE1`.`Id_TA1` AS `Id_TA1`,
    `ESSAI_TRADUCTION`.`Content_TRAD` AS `Val1_TA1`,
    `ESSAI_TRADUCTION`.`Content_TRAD` AS `Val2_TA1`,
    `ESSAI_TRADUCTION`.`Content_TRAD` AS `Val3_TA1`  
    from (`ESSAI_TABLE1` join `ESSAI_TRADUCTION`) 
    where ((`ESSAI_TRADUCTION`.`Table_TRAD` = 'ESSAI_TABLE1') 
    and (`ESSAI_TABLE1`.`Id_TA1` = `ESSAI_TRADUCTION`.`IdChamps_TRAD`))
    Ça me renvoie bien les résultats traduits mais sur 3 lignes...

    Du coup je pensais le faire avec un DISTINCT et GROUP BY sur IdChampsConcerne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select distinct `ESSAI_TABLE1`.`Id_TA1` AS `Id_TA1`,
    `ESSAI_TRADUCTION`.`Content_TRAD` AS `Val1_TA1`,
    `ESSAI_TRADUCTION`.`Content_TRAD` AS `Val2_TA1`,
    `ESSAI_TRADUCTION`.`Content_TRAD` AS `Val3_TA1` 
    from (`ESSAI_TABLE1` join `ESSAI_TRADUCTION`) 
    where ((`ESSAI_TRADUCTION`.`Table_TRAD` = 'ESSAI_TABLE1') 
    and (`ESSAI_TABLE1`.`Id_TA1` = `ESSAI_TRADUCTION`.`IdChamps_TRAD`)) 
    group by `ESSAI_TABLE1`.`Id_TA1`
    Mais dans ce cas, mysql me renvoie simplement la première ligne.
    J'aimerais que les résultats soit mergés et ne forment qu'une seul ligne par Id_Champs comme sur la Table mère.

    Cette solution me permettra de juste ajouter _EN à la fin de ma table pour afficher les résultats de la vue en anglais plutôt qu'en français.

    Je ne sais pas si ce que j'essaye de faire est possible, mais il me semble que je ne suis plus très loin...
    (J'ai aussi essayé avec GROUP_CONCAT dans la requête créant la vue, mais cela ne va pas).

    Merci de votre lecture et de votre aide éventuelle

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut UP !
    Salut !

    Un petit Up !

    Personne n'a de réponse à me donner ?
    Suis-je assez clair dans ma question ?
    N'hésitez pas à me faire clarifier si vous pensez pouvoir résoudre ce problème mais qu'il vous manque des informations...

    Merci

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Une jeu d'essai plus résultat attendu pourrait rendre les choses plus claires.

    Quelque chose comme ceci peut-être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    SELECT 
        Id_TA1
        ,MAX(CASE WHEN ChampsConcerne_TRAD = 'Val1_TA1'  THEN Content_TRAD END) AS Val1_TA1
        ,MAX(CASE WHEN ChampsConcerne_TRAD = 'Val2_TA1'  THEN Content_TRAD END) AS Val2_TA1
        ,MAX(CASE WHEN ChampsConcerne_TRAD = 'Val3_TA1'  THEN Content_TRAD END) AS Val3_TA1
    FROM ESSAI_TABLE1
    JOIN ESSAI_TRADUCTION
        ON id_TA1 = IdChamps_TRAD
        AND Table_TRAD = 'ESSAI_TABLE1'
    GROUP BY  Id_TA1

Discussions similaires

  1. Comment utiliser l'outil Talend pour administrer une base de données qui gère des fichiers
    Par JonasYounes dans le forum Installation, migration et administration
    Réponses: 1
    Dernier message: 04/08/2014, 21h23
  2. Réponses: 2
    Dernier message: 04/05/2007, 15h13
  3. Réponses: 2
    Dernier message: 11/04/2007, 14h13
  4. Réponses: 1
    Dernier message: 24/11/2005, 12h44
  5. Taille d'une base de données de l'ensemble des voitures...
    Par djbenvik dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 03/11/2005, 08h34

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