Bonsoir, aujourd'hui j'ai eu du mal à effectuer une requête et j'ai presque touché le but donc j'espère que vous aller corriger mon erreur
Contexte :
Dans une appli qui gère le multi-langages, je veux créer une requête qui me retourne tous mes sports :
Maintenant je veux "greffer" la traduction, donc avoir un LIB_SPORT qui correspond par défaut, et, si la traduction existe, la joindre à mon résultat sinon renvoyer NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT ID_SPORT, LIB_SPORT FROM SPORT
J'en arrive donc à ceci :
Par exemple, si j'ai 2 sports, "Aviron" (ID = 1) qui possède une traduction en anglais, allemand et espagnol ; et "Football" (ID = 2) qui n'en possède pas, la requête me retourne ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT SPORT.ID_SPORT, SPORT.LIB_SPORT, SPORT_TRAD.LIB_SPORT AS "LIB_SPORT_TRAD" FROM SPORT LEFT JOIN SPORT_TRAD ON SPORT.ID_SPORT = SPORT_TRAD.ID_SPORT
ID_SPORT LIB_SPORT LIB_SPORT_TRAD 1 Aviron Rowing 1 Aviron Ruder 1 Aviron Remo 2 Football NULL
Enfin, et c'est là que ça devient compliqué, je veux récupérer uniquement les traductions dans la langue du site. Comme il se peut qu'un champ ne soit pas traduit, dans ce cas là le champ utilisé est celui par défaut (LIB_SPORT) qui est en français.
Une table LANGUE liée avec SPORT_TRAD me permet de filtrer cela. Voilà comment j'ai fait :
(FR peut bien sûr varier avec UK, DE ou ES via un paramètre)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT SPORT.ID_SPORT, SPORT.LIB_SPORT, SPORT_TRAD.LIB_SPORT AS "LIB_SPORT_TRAD" FROM SPORT LEFT JOIN SPORT_TRAD ON SPORT.ID_SPORT = SPORT_TRAD.ID_SPORT LEFT JOIN LANGUE ON SPORT_TRAD.ID_LANGUE = LANGUE.ID_LANGUE WHERE LANGUE.LIB_LANGUE_COURT LIKE '%FR%' OR SPORT_TRAD.ID_LANGUE IS NULL
J'arrive à avoir ce que je veux quand la langue de traduction existe mais pas quand je reste en français.
Ex. qui fonctionne avec 'UK' par exemple :
ID_SPORT LIB_SPORT LIB_SPORT_TRAD LIB_LANGUE_COURT 1 Aviron Rowing UK 2 Fooball NULL NULL
Ex. qui ne fonctionne pas avec FR :
ID_SPORT LIB_SPORT LIB_SPORT_TRAD LIB_LANGUE_COURT 2 Fooball NULL NULL
Ce que je veux :
ID_SPORT LIB_SPORT LIB_SPORT_TRAD LIB_LANGUE_COURT 1 Aviron NULL NULL 2 Fooball NULL NULL
Voilà, je touche au but mais il manque encore une étape
Merci d'avance pour votre aide, j'ai essayé d'être clair mais si vous avez besoin de plus d'informations demandez-moi ! (je n'ai pas le code sous les yeux, donc il se peut que mes requête soient fausses, mais globalement les relations sont là).
Cordialement,
Partager