kirk57
Messages postés9Date d'inscriptionsamedi 10 mai 2008StatutMembreDernière intervention 4 août 2011
-
19 janv. 2010 à 10:40
kirk57
Messages postés9Date d'inscriptionsamedi 10 mai 2008StatutMembreDernière intervention 4 août 2011
-
19 janv. 2010 à 11:20
Bonjour,
J'ai 2 tables pour gérer le multilangue de l'interface et des pages "statiques" sur mes sites.
La première gère les clefs, la deuxième gère les contenus dans toutes les langues.
Voici le SQL pour créer les tables avec un peu de contenu pour que vous puissiez tester.
Je souhaite pouvoir modifier ces valeurs via le backoffice et pour ce faire je veux récupérer toutes les clefs et leur contenu même si elles n'en ont pas encore.
Un exemple très simplifié de ce que je voudrais afficher :
Comme vous pouvez le voir, la clef 'emploi' n'a pas de correspondance mais je voudrais que la clef s'affiche quand même que je puisse lui ajouter une valeur.
Voici la requête que je fait actuellement pour récupérer les clefs et leur valeur pour les textes de l'interface :
SELECT d.key, d.active, t.id, t.id_dico, t.val, t.active
FROM dico AS d LEFT JOIN translation AS t
ON d.id = t.id_dico
WHERE d.deleted = 0
AND t.deleted = 0
AND d.static = 0
AND t.lang = 'EN'
ORDER BY d.key
Le problème est que je récupère seulement les clefs qui ont un enregistrement correspondant dans la table des valeurs.
Quelqu'un peut m'aider?
Merci d'avance.
cs_47
Messages postés197Date d'inscriptionmardi 20 janvier 2004StatutMembreDernière intervention20 février 20131 19 janv. 2010 à 11:08
Bonjour,
peut être ceci: (si emploi n'a pas de correspondance dans la table traduction, les conditions where utilisant t l'exclus dans le résultat, d'où l'ajout du or)
SELECT d.key, d.active, t.id, t.id_dico, t.val, t.active
FROM dico AS d
LEFT JOIN translation AS t ON d.id = t.id_dico
WHERE d.deleted =0
AND (t.deleted =0 OR t.deleted IS NULL)
AND d.static =0
AND (t.lang = 'EN' OR t.lang IS NULL)
ORDER BY d.key
kirk57
Messages postés9Date d'inscriptionsamedi 10 mai 2008StatutMembreDernière intervention 4 août 2011 19 janv. 2010 à 11:20
Merci pour le lien, grâce à cela j'ai pu résoudre mon problème comme suit :
SELECT d.key, d.active, t.id, t.id_dico, t.val, t.active
FROM dico AS d
LEFT OUTER JOIN translation AS t ON d.id = t.id_dico
WHERE (
d.deleted =0
AND t.deleted =0
AND d.static =0
AND t.lang = 'EN'
)
OR t.id IS NULL
ORDER BY d.key
L'important c'est de préciser que l'on veut également les enregistrements NULL.