IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Mise en forme avec trois tables


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Mise en forme avec trois tables
    Bonjour à tous,

    Je veux effectuer une jointure avec les tables pour afficher les trois tables sous la forme :

    Constructeur reference prix reference prix reference prix
    ----------------- -------- ---- ------------------ -- ------------ ----

    Chassis (constructeur, Reference, designation, prix )
    Interface (constructeur, Reference, designation, prix )
    Modules (constructeur, Reference, designation, prix )

    Reference est une clé primaire.

    Les objets de la table Chassis peut contenir plusieurs objets de la table Interface et les objets de la table Interface nécessite des objets de la table Modules.

    En gros cela donne :

    1Chassis_avec X interfaces ->Interface1 -> Modules1
    ->Interface2 -> Modules 2
    ->Interface3->Modules3

    J’utilise la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.constructeur,
           t1.reference, t1.prix,
           t2.reference, t2.prix,
           t3.reference, t3.prix
      FROM chassis AS t1, interface AS t2, module AS t3
     WHERE t1.constructeur = t2.constructeur
       AND t1.constructeur = t3.constructeur
    Le problème est l’apparition de plusieurs fois des lignes avec un seul changement dans les objets de chaque champs.

    Je voudrais enlever tout les doublons pour cela fasse un peu plus clair.
    Même on rajoutant des conditions, j'enlève des données importantes ou c'est du n'importe quoi....

    Avez-vous des conseils pour l’organisation de mes tables ou sur la requête SQL ?

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Ginko7 Voir le message
    Je veux effectuer une jointure avec les tables pour afficher les trois tables sous la forme :

    Constructeur reference prix reference prix reference prix
    ----------------- -------- ---- ------------------ -- ------------ ----

    Chassis (constructeur, Reference, designation, prix )
    Interface (constructeur, Reference, designation, prix )
    Modules (constructeur, Reference, designation, prix )

    Reference est une clé primaire.
    Cette structure laisse supposer que Reference est celle du chassis ou celle de l'interface ou celle du module.

    Les objets de la table Chassis peut contenir plusieurs objets de la table Interface et les objets de la table Interface nécessite des objets de la table Modules.

    En gros cela donne :

    1Chassis_avec X interfaces ->Interface1 -> Modules1
    ->Interface2 -> Modules 2
    ->Interface3->Modules3
    Un module peut-il faire partie de plusieurs interfaces et une interface peut-elle faire partie de plusieurs chassis ?
    Si c'est le cas, il devrait y avoir des tables associatives.

    [quote]J’utilise la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.constructeur,
           t1.reference, t1.prix,
           t2.reference, t2.prix,
           t3.reference, t3.prix
      FROM chassis AS t1, interface AS t2, module AS t3
     WHERE t1.constructeur = t2.constructeur
       AND t1.constructeur = t3.constructeur
    L'association entre le chassis et ses interfaces et entre l'interface et ses modules se fait par l'identifiant du constructeur ?
    Alors si un constructeur fait des chassis de voiture et des chassis de baie informatique, on pourra mettre une interface fibre optique contenant des modules prise optique dans une voiture ?

    Il faut revoir la structure des tables !

    En supposant, cas le plus simple, qu'un module n'aille que sur une seule interface et qu'une interface ne va que sur un seul chassis, les tables devraient être les suivantes :
    Chassis (constructeur, Reference, designation, prix )
    Interface (constructeur, Reference, designation, prix, Ref_chassis )
    Modules (constructeur, Reference, designation, prix, Ref_interface )

    Ref_chassis et ref_interface sont des clés étrangères faisant référence à l'identifiant du chassis pour l'interface et de l'interface pour le module.

    Dès lors, la requête normale est celle-ci, avec la syntaxe normalisée depuis 1992 pour les jointures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.constructeur,
           t1.reference AS Reference_Chassis, t1.prix AS Prix_chassis,
           t2.reference AS Reference_Interface, t2.prix AS Prix_Interface,
           t3.reference AS Reference_Module, t3.prix AS Prix_Module
    FROM chassis AS t1
    INNER JOIN interface AS t2 ON t2.ref_chassis = t1.reference
      INNER JOIN module AS t3 ON t3.ref_interface = t2.reference
    Et encore faut-il que deux constructeurs différents n'utilisent pas la même référence sinon ça coince !
    Il vaudrait mieux utiliser comme clé un identifiant anonyme et invariable de type entier et auto-incrémenté par le SGBD plutôt qu'une référence dont on ne contrôle pas la valeur. Voir l'article de SQLPro sur ce qu'est une bonne clé.

    Le problème est l’apparition de plusieurs fois des lignes avec un seul changement dans les objets de chaque champs.
    En dehors des remarques précédentes, ce résultat est tout à fait normal !
    Puisque 1 chassis C peut contenir les interfaces I1 et I2, lesquelles peuvent contenir les modules M1, M2, M3, M4, il y aura au minimum autant de lignes qu'il y a de modules et donc plusieurs fois les chassis et les interfaces.

Discussions similaires

  1. Mise en forme d'une table avec du PHP
    Par Lorgar dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2011, 15h31
  2. Réponses: 5
    Dernier message: 17/06/2008, 15h17
  3. [WebForms][2.0] Mise en forme avec du css
    Par kakid dans le forum Général Dotnet
    Réponses: 12
    Dernier message: 26/01/2006, 18h49
  4. Mise en forme avec Netscape et Mozilla
    Par seb30 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/10/2004, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo