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 :
Ça me renvoie bien les résultats traduits mais sur 3 lignes...
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`))
Du coup je pensais le faire avec un DISTINCT et GROUP BY sur IdChampsConcerne
Mais dans ce cas, mysql me renvoie simplement la première ligne.
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`
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
Partager