Bonjour,
Je me heurte à un problème que je pouvais résoudre jusqu'ici par programmation, mais dans le cadre d'une procédure un peu complexe je me demande si mes choix étaient bons.
En simplifiant disons que j'ai une table "achats" dans laquelle je regroupe un type d'objet avec un objet. Les objets de chaque type ont des propriétés différentes c'est la raison pour laquelle j'ai choisi de les gérer dans des tables distinctes. Pour obtenir une liste précise des achats je suis donc obligé de faire une première requetes pour récupérer tous les achats, puis de boucler sur le résultat pour trouver la table à interroger pour obtenir le nom de l'objet.
Je procédais ainsi à défaut de mieux. Mais j'ai besoin de savoir, à cause de nouvelles contraintes, s'il est possible avec MySQL que le nom d'une table dans une jointure soit dynamique pour chaque ligne. Autrement dit je voudrais que dans la requête suivante "table_dynamique" prenne comme valeur "objet_type1"/"objet_type2" ... en fonction de achats.typeid :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT achats.*, types.nom , table_dynamique.nom FROM achats INNER JOIN types ON types.id = achats.typeid INNER JOIN table_dynamique ON table_dynamique.id = achats.objetid
Voici mes tables simplifiées :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATE TABLE IF NOT EXISTS `achats` ( `id` int(10) unsigned NOT NULL auto_increment, `typeid` int(10) unsigned default NULL, `objetid` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `types` ( `id` int(10) unsigned NOT NULL auto_increment, `nom` varchar(20) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `objet_type1` ( `id` int(10) unsigned NOT NULL auto_increment, `nom` varchar(100) collate utf8_unicode_ci NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `objet_type2` ( `id` int(10) unsigned NOT NULL auto_increment, `nom` varchar(100) collate utf8_unicode_ci NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Merci.
Partager