Mysql : Table listant d'autres tables

Résolu/Fermé
Blanc57 Messages postés 369 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 27 janvier 2020 - 26 juin 2012 à 11:13
Blanc57 Messages postés 369 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 27 janvier 2020 - 26 juin 2012 à 20:33
Bonjour,


Je ne connais pas grand chose en bases de données et je suis sur un petit projet de développement d'appli web J2EE/Struts2 avec une base de donnée Mysql.

Je souhaite savoir s'il est possible de créer une table permettant de lister/indexer d'autres tables.
Exemple :

Table "liste_table" :

id | Marque | modele | table
-------------------------------------------
1 | Peugeot | 206 | tab_peugeot_206
2 | Citroen | C3 | tab_citroen_c3
etc...

Table "tab_peugeot_206" :

id | piece | prix
-------------------------
1 | essuie-glace | 20€
2 | pare-brise | 50€
etc...

et je souhaiterais pouvoir faire :

select * from (select table from liste_table where marque='peugeot' and modele='206')


J'ai essayé comme dans l'exemple ci-dessus mais cela ne marche pas ainsi.
Est-ce possible ? Si oui, comment dois-je m'y prendre ?
Et sinon, comment organise-t-on une base dans pareil cas ? Est-on obliger de lister toutes les pièces détachées, de tous les modèles dans une table puis de faire une recherche dans la table "pièces détachées" en fonction du modèle de voiture ?
J'aurais aimé avoir une table distincte par modèle de voiture mais il me faut un moyen de retrouver la table correspondant à chaque modèle (je pourrais le faire par J2EE mais je préfererais que cela soit fait avec MySQL)

Merci d'avance pour votre aide.

1 réponse

La syntaxe "SELECT * FROM ( SELECT table FROM ... ) res" ne donnera pas le résultat souhaité ici.

Et au vu du problème, ce n'est probablement la bonne manière de s'y prendre.

A moins qu'une partie de ton problème m'ait échappé, je te suggère de faire ainsi:
- 1 table "voiture", avec clé primaire "id_voiture"
- 1 table "piece_detachee", avec clé primaire "id_piece_detachee"
- 1 Table de liaison N-N, "voiture_piece_detachee", contenant les champs "id_voiture" et "id_piece_detachee"

Pour obtenir les pièces détachées d'une voiture:
SELECT piece_detachee.* FROM voiture
INNER JOIN voiture_piece_detachee ON voiture.id_voiture = voiture_piece_detachee.id_voiture
INNER JOIN piece_detachee ON piece_detachee.id_piece_detachee = voiture_piece_detachee.id_piece_detachee
WHERE
voiture.id_voiture = 10

Les noms de tables et de champs sont des exemples et peuvent être bien sûr adaptés ;)
0
Blanc57 Messages postés 369 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 27 janvier 2020 73
26 juin 2012 à 20:33
Merci pour votre aide.
J'avais utilisé cette méthode jusque là pour mes essais, avec tables séparées et je pense donc que je vais continuer comme cela...
Merci encore.
0