problème de jointure avec deux tables avec mysql

problème de jointure avec deux tables avec mysql - SQL/NoSQL - Programmation

Marsh Posté le 28-05-2006 à 09:21:08    

Bonjour,
j'ai un problème jointure depuis quelques temps que je n'arrive pas à résoudre:
Voila les deux tables(ps: j'ai simplifié)
CREATE TABLE `utilisateur` (
`id` int(9) NOT NULL auto_increment,
`choix1` varchar(30) NOT NULL default '',
`choix2` varchar(30) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
 
 
INSERT INTO `utilisateur` VALUES (1, '1', '3');
INSERT INTO `utilisateur` VALUES (2, '2', '4');
 
 
 
 
CREATE TABLE `traduction` (
  `motid` int(9) NOT NULL auto_increment,
  `mot` text NOT NULL,
  PRIMARY KEY  (`motid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
 
 
 
INSERT INTO `traduction` VALUES (1, 'livre');
INSERT INTO `traduction` VALUES (2, 'stylo');
INSERT INTO `traduction` VALUES (3, 'revue');
INSERT INTO `traduction` VALUES (4, 'dvd');
donc je voudrais comme résultat par exemple pour l‘utilisateur ‘1’ que dans ses infos le résultat qui s’affiche soit :livre et revue
et que pour l‘utilisateur ‘2’ que dans ses infos le résultat qui s’affiche soit :stylo et dvd.
Donc est-ce qu‘il y aurait une personne qui puisse m'aider à faire la jointure car je galère
j'ai essayé:
$sql = " SELECT  * FROM fournisseur f inner join traduction t on t.motid=f.creer where utilisateur='1'";
malheureusement cela m'affiche "1" et "3" et pas  "livre" et "revue"
merci

Reply

Marsh Posté le 28-05-2006 à 09:21:08   

Reply

Marsh Posté le 28-05-2006 à 12:37:24    

select traduction.mot from traduction, utilisateur where utilisateur.id='1' and  
(utilisateur.choix1 = traduction.motid or utilisateur.choix2 = traduction.motid);
 
PS: Le fait d'intégrer les 2 choix dans la table "utilisateur" est une erreur de conception qui bloque toute évolutivité (comment feras-tu le jour où tu voudras offrir 3 choix aux utilisateurs et non plus 2 ? Tu modifieras la structure de "utilisateur" + toutes les requêtes comme celle ci-dessus ???)
 
La rigueur voudrait que tu crées une table "choisir" contenant
(id_utilisateur, choix)
Que tu bloques par pgm le remplissage de cette table à 2 tuple par utilisateur est un détail et le jour où ça doit évoluer, la modif est facile...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed