begin process at 2012 05 31 01:22:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Problème avec LEFT JOIN MYSQL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,669 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales