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

Requêtes MySQL Discussion :

Requête, jointures avec table de liaison


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Requête, jointures avec table de liaison
    Bonjour, je suis plus ou moins novice dans la programmation Mysql et j'aimerais m’exercè sur un mini projet sur un club de football.

    J'ai fait mon schéma avec Mysql Workbench que je connais depuis peux, je vais plutôt vous montrer ma construction pour que vous puissiez mieux comprendre ce que je souhaite faire.

    J'ai donc créer une base de données club avec a l'intérieur 5 tables
    • Club
    • Stade
    • Equipe
    • Entraineurs
    • Joueurs



    ********************************************************
    Je me suis dit que un club pouvez avoir qu'un stade (je n'avais pas envie que le club et plusieurs stade, entrainement etc...) et qu'un stade avais qu'un club.

    Un club peux avoir 0 ou plusieurs équipes (Equipe Pro, Equipe Amateur etc...) et qu'une équipe a 1 club

    Un club peux avoir 0 ou plusieurs entraineur et un entraineurs peux avoir 0 ou 1 club

    Un club peux avoir 0 ou plusieurs joueurs et qu'un joueur peux avoir 0 ou 1 club

    Un entraineur peux avoir 0 ou plusieurs joueurs et un joueurs peux avoir 0 ou plusieurs entraineurs. (entraineur, préparateur physique etc..)

    ********************************************************

    Voilà, je pense avoir fait le tour de ce que j'aurais besoin de renseigner pour mes cardinalités.

    Je vous met ensuite le schéma que j'ai fait sur workbench.



    J'ai ensuite créer mes tables avec la programmation suivante que Workbench propose.

    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
     
    CREATE SCHEMA IF NOT EXISTS `club_football` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
    USE `club_football` ;
     
    -- -----------------------------------------------------
    -- Table `club_football`.`Club`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `club_football`.`Club` (
      `idClub` INT NOT NULL AUTO_INCREMENT,
      `NomClub` VARCHAR(255) NULL,
      `PhotoClub` VARCHAR(255) NULL,
      `AdresseClub` VARCHAR(255) NULL,
      `TelFix` VARCHAR(45) NULL,
      `TelPortable` VARCHAR(45) NULL,
      `LogoClub` VARCHAR(255) NULL,
      `DateCreationClub` VARCHAR(45) NULL,
      PRIMARY KEY (`idClub`))
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `club_football`.`Equipe`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `club_football`.`Equipe` (
      `idEquipe` INT NOT NULL AUTO_INCREMENT,
      `HeureEntrainement` VARCHAR(45) NULL,
      `DivOccuper` VARCHAR(255) NULL,
      `Club_idClub` INT NOT NULL,
      PRIMARY KEY (`idEquipe`),
      CONSTRAINT `fk_Equipe_Club1`
        FOREIGN KEY (`Club_idClub`)
        REFERENCES `club_football`.`Club` (`idClub`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Equipe_Club1_idx` ON `club_football`.`Equipe` (`Club_idClub` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `club_football`.`Joueurs`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `club_football`.`Joueurs` (
      `idJoueurs` INT NOT NULL AUTO_INCREMENT,
      `NomJoueur` VARCHAR(255) NULL,
      `PrenomJoueur` VARCHAR(255) NULL,
      `Age` VARCHAR(45) NULL,
      `DateNaissance` VARCHAR(45) NULL,
      `Categorie` VARCHAR(45) NULL,
      `Taille` VARCHAR(45) NULL,
      `PosteJouer` VARCHAR(45) NULL,
      `AncienClub` VARCHAR(255) NULL,
      `PhotoJoueur` VARCHAR(255) NULL,
      `TelFix` VARCHAR(45) NULL,
      `TelPortable` VARCHAR(45) NULL,
      `Nationalite` VARCHAR(255) NULL,
      `Club_idClub` INT NULL,
      `Equipe_idEquipe` INT NULL,
      PRIMARY KEY (`idJoueurs`),
      CONSTRAINT `fk_Joueurs_Club1`
        FOREIGN KEY (`Club_idClub`)
        REFERENCES `club_football`.`Club` (`idClub`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_Joueurs_Equipe1`
        FOREIGN KEY (`Equipe_idEquipe`)
        REFERENCES `club_football`.`Equipe` (`idEquipe`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Joueurs_Club1_idx` ON `club_football`.`Joueurs` (`Club_idClub` ASC);
     
    CREATE INDEX `fk_Joueurs_Equipe1_idx` ON `club_football`.`Joueurs` (`Equipe_idEquipe` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `club_football`.`Entraineurs`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `club_football`.`Entraineurs` (
      `idEntraineurs` INT NOT NULL AUTO_INCREMENT,
      `NomEntraineur` VARCHAR(255) NULL,
      `PrenomEntraineur` VARCHAR(255) NULL,
      `Age` VARCHAR(45) NULL,
      `DateNaissance` VARCHAR(45) NULL,
      `Nationalite` VARCHAR(255) NULL,
      `AncienClub` VARCHAR(255) NULL,
      `PhotoEntraineur` VARCHAR(255) NULL,
      `Club_idClub` INT NULL,
      `Equipe_idEquipe` INT NULL,
      PRIMARY KEY (`idEntraineurs`),
      CONSTRAINT `fk_Entraineurs_Club1`
        FOREIGN KEY (`Club_idClub`)
        REFERENCES `club_football`.`Club` (`idClub`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_Entraineurs_Equipe1`
        FOREIGN KEY (`Equipe_idEquipe`)
        REFERENCES `club_football`.`Equipe` (`idEquipe`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Entraineurs_Club1_idx` ON `club_football`.`Entraineurs` (`Club_idClub` ASC);
     
    CREATE INDEX `fk_Entraineurs_Equipe1_idx` ON `club_football`.`Entraineurs` (`Equipe_idEquipe` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `club_football`.`Stade`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `club_football`.`Stade` (
      `idStade` INT NOT NULL AUTO_INCREMENT,
      `NomStade` VARCHAR(255) NULL,
      `PhotoStade` VARCHAR(255) NULL,
      `CapatieStade` VARCHAR(255) NULL,
      `Club_idClub` INT NOT NULL,
      PRIMARY KEY (`idStade`, `Club_idClub`),
      CONSTRAINT `fk_Stade_Club1`
        FOREIGN KEY (`Club_idClub`)
        REFERENCES `club_football`.`Club` (`idClub`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Stade_Club1_idx` ON `club_football`.`Stade` (`Club_idClub` ASC);
     
     
    -- -----------------------------------------------------
    -- Table `club_football`.`Entraineurs_Joueurs`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `club_football`.`Entraineurs_Joueurs` (
      `Entraineurs_idEntraineurs` INT NULL,
      `Joueurs_idJoueurs` INT NULL,
      PRIMARY KEY (`Entraineurs_idEntraineurs`, `Joueurs_idJoueurs`),
      CONSTRAINT `fk_Entraineurs_has_Joueurs_Entraineurs1`
        FOREIGN KEY (`Entraineurs_idEntraineurs`)
        REFERENCES `club_football`.`Entraineurs` (`idEntraineurs`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_Entraineurs_has_Joueurs_Joueurs1`
        FOREIGN KEY (`Joueurs_idJoueurs`)
        REFERENCES `club_football`.`Joueurs` (`idJoueurs`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
    CREATE INDEX `fk_Entraineurs_has_Joueurs_Joueurs1_idx` ON `club_football`.`Entraineurs_Joueurs` (`Joueurs_idJoueurs` ASC);
     
    CREATE INDEX `fk_Entraineurs_has_Joueurs_Entraineurs1_idx` ON `club_football`.`Entraineurs_Joueurs` (`Entraineurs_idEntraineurs` ASC);
     
     
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
    Mes questions sont les suivantes...

    Je souhaiterais afficher tous ce que contient le ou les club, (Equipes, Joueurs, Stade, Entraineurs)

    Ensuite je souhaiterais afficher les joueurs qui sont entrainer par tel ou tel entraineurs.

    Exemple le joueur avec l'id=1 l'id=2 l'id=3 et entrainer par l'entraineur avec l'id=1

    Laurent Blanc entraine =>
    • Cavani
    • Ibrahimovic
    • Thiago Sylva


    avec la table de jointure normalement je devrais afficher ce que je souhaite, mais avec plusieurs tentative je n'y arrive pas a faire les requêtes que je demande plus haut a savoir afficher tous le contenu de chaque club avec la relation qu'il peux y avoir (tel joueur et dans tel équipe et entrainer par tel entraineur etc...) si je schématise voilà ce que je souhaite avoir...

    Les clubs
    • Paris SG
    • AS Monaco
    • OL Marseille


    Les Stades
    • Parc des princes (Paris SG)
    • Stade Louis II (AS Monaco)
    • Stade Vélodrome (OL Marseille)


    Les Entraineurs
    • Laurent Blanc (Paris SG)
    • Claudio Ranieri (AS Monaco)
    • Elie Baup (OL Marseille)


    Les Joueurs
    • Edinson Cavani (Paris SG)
    • Zlatan Ibrahimovic (Paris SG)
    • Pierre Gignac (OL Marseille)
    • Eric Abidal (AS Monaco)
    • Pierre Menez (Aucun Club)


    Donc voilà j'aimerais faire correspondre chaque club avec chaque éléments, (joueur,entraineurs,stade) (joueurs, entrainer par => tel entraineurs) (tel entraineur => a tel et tel joueurs sous ces ordres)

    Voilà ce que je souhaite finalement faire.
    La seul chose que j'ai réussi a faire c'est d'afficher la relation entre les entraineurs et les clubs avec qui ils sont rattachés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <!-- Afficher a qu'elle entraineur appartient a quel club -->
    <?php
    SELECT * FROM entraineurs 
    INNER JOIN club ON (Club_idClub=idClub)
    ?>
    Voilà le reste j'ai fait plusieurs test et je n'y arrive pas, malgré plusieurs tuto vidéo que j'ai regarder sur internet, mais j'arrive pas a voir ce que je veux, avec la table de liaison entre les joueurs et entraineurs, car un entraineur peux avoir 0 ou plusieurs joueurs et un joueur peux avoir 0 ou plusieurs entraineurs.

    Merci donc de m'expliquer comment faire pour afficher tous le contenu de chaque club et de me dire comment afficher ce que je demande plus haut, je vous remercie déjà a l'avance, les amis codeurs.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Toujours pas de réponse ?

    J'ai réussi a faire afficher certain éléments avec les jointures suivantes, j'espère que c'est la bonne méthode, si quelqu'un pourrais m'aider sa serais super cool !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM entraineurs_joueurs
    INNER JOIN entraineurs ON idEntraineurs = Entraineurs_idEntraineurs
    INNER JOIN joueurs ON idJoueurs = Joueurs_idJoueurs 
    INNER JOIN club ON idClub = Entraineurs_idEntraineurs
    Par contre j'aimerais afficher aussi les stade de chaque club dans cette requete mais je n'y arrive pas car surement qu'il faut rajouter la table dans le FROM et ensuite faire un INNER JOIN sur la table stade comme ceci ?
    J'ai essayer avec la requête ci-dessous mais sa ne fonctionne pas .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM entraineurs_joueurs,idEquipe,equipe,idClub.club
    INNER JOIN entraineurs ON idEntraineurs = Entraineurs_idEntraineurs
    INNER JOIN joueurs ON idJoueurs = Joueurs_idJoueurs 
    INNER JOIN club ON idClub = Entraineurs_idEntraineurs 
    INNER JOIN equipe ON Club_idClub = idClub
    Je dois surement pas faire la bonne requête merci de m'aider SVP

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Après deux jours de test, j'ai réussi a afficher entièrement ce que contient mon club de foot, entraineur qui entraine tel ou tel joueur qui compose le club, avec le stade du club avec la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM club
    INNER JOIN championnat ON idChampionnat = Championnat_idChampionnat
    INNER JOIN entraineurs ON idClub= entraineurs.Club_idClub
    INNER JOIN joueurs ON idClub = joueurs.Club_idClub
    INNER JOIN stade ON idClub = stade.Club_idClub
    et si je souhaite afficher club par club je rajoute un WHERE idClub= (id du club que l'on veu 1,2,3,4......)

Discussions similaires

  1. @OneToMany - jointure avec table ou colonne ?
    Par Hole_geek dans le forum JPA
    Réponses: 0
    Dernier message: 14/03/2012, 12h24
  2. jointure avec table T030
    Par kercommun dans le forum SAP
    Réponses: 5
    Dernier message: 24/01/2011, 16h50
  3. Jointure avec tables contenant des memes noms de champs
    Par guy2004 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/01/2010, 10h25
  4. Requête avec table de liaison
    Par Doudy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/05/2008, 19h09
  5. Jointures sur table de liaison (n-n) renvoie des doublons
    Par MICHEL_R dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2008, 14h34

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