Mysql : Table listant d'autres tables

Résolu
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

  1. 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
    1. 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