Bonjour,
Je souhaiterais effectuer une requête sur 2 tables la table A (qui contient mes données) et la table B (qui contient mes traductions).
table A
id id_langue_defaut texte
table B
id_A id_langue texte
Je souhaiterais récupérer la liste complète des données de ma table A avec toutes les langues sous forme de colonnes. Après plusieurs tests et de brûlage de neurones, j'en arrive à une requête de ce type :
Donc ça fonctionne mais ça suppose que dans A ma langue par défaut est toujours le fr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT a.*, b_fr.texte as texte_fr, b_an.texte as texte_an, b_it.texte as texte_it, b_es.texte as texte_es FROM B as b_fr LEFT OUTER JOIN B b_an ON b_fr.id_A = b_an.id_A AND b_an.id_langue =2 LEFT OUTER JOIN B b_it ON b_fr.id_A = b_it.id_A AND b_it.id_langue =3 LEFT OUTER JOIN B b_es ON b_fr.id_A = b_es.id_A AND b_es.id_langue =4 JOIN A a ON a.id=b_fr.id_A WHERE b_fr.id_langue = a.id_langue_defaut
Question est-il possible de créer des conditions pour déterminer le nom d'un champ ? Par exemple
En tout cas ceci ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SELECT A.*, ( SELECT CASE --si la langue par défaut est 1 dans la table A, on utilise le champ texte de cette table WHEN (A.id_langue_defaut=1) THEN (SELECT texte FROM A as tmp WHERE tmp.id=A.id) --si la langue n'est pas 1, on essaye de chercher la traduction dans la table B WHEN (SELECT COUNT(id_A) FROM B as tw WHERE tw.id_A=A.id and tw.id_langue=1) THEN (SELECT texte FROM B as tmp WHERE tmp.id_A=A.id and tmp.id_langue=1) --sinon on retourne null dans texte_fr ELSE ("NULL") END ) as texte_fr FROM A
Quelqu'un aurait des solutions ?
Partager