Accueil > Forum > > > > Problème avec LEFT JOIN MYSQL
Problème avec LEFT JOIN MYSQL
mardi 19 janvier 2010 à 10:40:40 |
Problème avec LEFT JOIN MYSQL

kirk57
|
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.
Code :
--
-- Structure de la table `dico`
--
CREATE TABLE IF NOT EXISTS `dico` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(50) COLLATE utf8_bin NOT NULL,
`static` tinyint(1) NOT NULL DEFAULT '0',
`active` tinyint(1) NOT NULL DEFAULT '1',
`date_created` datetime DEFAULT NULL,
`date_updated` datetime DEFAULT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`date_deleted` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `var` (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=7 ;
--
-- Contenu de la table `dico`
--
INSERT INTO `dico` (`id`, `key`, `static`, `active`, `date_created`, `date_updated`, `deleted`, `date_deleted`) VALUES
(1, 'historique', 0, 1, '2010-01-15 20:46:59', NULL, 0, NULL),
(2, 'la_societe', 0, 1, '2010-01-15 20:46:59', NULL, 0, NULL),
(3, 'presentation', 0, 1, '2010-01-15 20:46:59', NULL, 0, NULL),
(4, 'technologies', 0, 1, '2010-01-15 20:46:59', NULL, 0, NULL),
(5, 'localisation', 0, 1, '2010-01-15 20:46:59', NULL, 0, NULL);
(6, 'emploi', 0, 1, '2010-01-15 20:46:59', NULL, 0, NULL);
--
-- Structure de la table `translation`
--
CREATE TABLE IF NOT EXISTS `translation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_dico` int(11) NOT NULL,
`lang` varchar(2) COLLATE utf8_bin NOT NULL,
`val` text COLLATE utf8_bin NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`date_created` datetime DEFAULT NULL,
`date_updated` datetime DEFAULT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`date_deleted` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=11 ;
--
-- Contenu de la table `translation`
--
INSERT INTO `translation` (`id`, `id_dico`, `lang`, `val`, `active`, `date_created`, `date_updated`, `deleted`, `date_deleted`) VALUES
(1, 1, 'FR', 'Historique', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(2, 2, 'FR', 'La société', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(3, 3, 'FR', 'Présentation', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(4, 4, 'FR', 'Technologies', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(5, 5, 'FR', 'Localisation', 1, '2010-01-15 22:04:57', NULL, 0, NULL);
(6, 1, 'EN', 'History', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(7, 2, 'EN', 'The company', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(8, 3, 'EN', 'Introduction', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(9, 4, 'EN', 'Technology', 1, '2010-01-15 22:04:57', NULL, 0, NULL),
(10, 5, 'EN', 'Location', 1, '2010-01-15 23:08:51', NULL, 0, NULL);
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 :
'Key' 'Value'
'historique' 'History'
'la_societe' 'The company'
'presentation' 'Introduction'
'technologies' 'Technology'
'localisation' 'Location'
'emploi'
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 :
Code :
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.
|
|
mardi 19 janvier 2010 à 10:54:13 |
Re : Problème avec LEFT JOIN MYSQL

Tonio_35
|
Réponse acceptée !
Hello, essai le "LEFT OUTER JOIN" ?
Pour plus d'infos sur les jointures Ici...
_________________________________
Min iPomme
|
|
mardi 19 janvier 2010 à 11:08:14 |
Re : Problème avec LEFT JOIN MYSQL

47
|
Réponse acceptée !
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)
Code :
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
retourne
key active id id_dico val active
emploi 1 NULL NULL [BLOB - 0o] NULL
historique 1 6 1 [BLOB - 7o] 1
la_societe 1 7 2 [BLOB - 11o] 1
localisation 1 10 5 [BLOB - 8o] 1
presentation 1 8 3 [BLOB - 12o] 1
technologies 1 9 4 [BLOB - 10o] 1
bonne journée
|
|
mardi 19 janvier 2010 à 11:20:12 |
Re : Problème avec LEFT JOIN MYSQL

kirk57
|
Merci pour le lien, grâce à cela j'ai pu résoudre mon problème comme suit :
Code :
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.
Merci beaucoup pour ton aide.
|
|
Cette discussion est classée dans : date, id, not, default, deleted
Répondre à ce message
Sujets en rapport avec ce message
creation *.sql [ par westsider ]
bonjour,je cherche un script pour creer un fichier *.sql coéplet, j'en ai qui fait ca :create table geneve ( id int(11) not null auto_increment, tit
Dernières réponses aux post en haut du forum [ par porciner ]
Bonjour, j'ai un problème :J'ai fait un forum et je voudrais que les titres des posts soient affichés en tenant compte de leur dernière réponse et non
besoin d'aide pour une analyse [ par speedylol ]
j'aurais besoins d'une analyse suivant merise pour c'est table ,j'ai perdu toute mon analyse et je doit terminée mon mémoire pour remettre ce soir il
Problème forum [ par Ssnacke ]
J'ai voulu crée un forum moi même parce que l'inconvénient avec des forums phpbb et autres c'est que les membres doivent toujours se réinscrire deux f
problème d'update dans bdd... [ par djinko ]
Bonsoir,J'ai deux tables :---------------------------------------------------------------------------------------CREATE TABLE `membre` ( `id_membre
Pb relation entre deux tables ! [ par milkasoprano ]
Bonjour tous le monde, apres 2 heures de recherches je narrive pas a mettre en relation "deux tables" pour afficher un while avec les donnés ! c un p
CREATE TABLE [ par simon0000 ]
salut tous le monde est ce que quelque un pourais me dir pourquoi ce code ne me marche pasmerciCREATE TABLE shop_commandes ( ID int(5) DEFAULT '0' N
Résultat d’une requete [ par djinko ]
Bonjour, J’ai crée un espace membre et j’aimerai pouvoir consulter les fiches à l’aide d’un formulaire mais je ne sais pas comment faire pour récupé
Insertin de donnees via un fichier externe [ par jeremay ]
Bonjour, j'ai besoin d'un peu d'aide sur un import d'un fichier CSV alors je m'explik :- j'ai 4 tables : CREATE TABLE `marque` ( `id_marq` int(11) NO
Tableau dynamique et couleur des lignes [ par jumano ]
Bonjour, Débutant en PHP Je travaille actuellement sur l'élaboration d'une petite application WEB de gestion de courriers ARRIVES et DEPARTS. J'ai une
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|