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 :

Joindre 3 (voir plus) tables ensemble


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut Joindre 3 (voir plus) tables ensemble
    Bonsoir,
    j'aimerai beaucoup joindre trois table dont voici le modèle:


    Tablature
    ID_Tab

    ID_Morceau

    Morceaux
    ID_Morceau
    ID_Groupe
    Nom_Morceau

    Groupes
    ID_Groupe
    Nom_Groupe

    Alors ce que je souhaite faire, c'est qu'à partir d'une ID tablature, je puisse retrouver le nom et le groupe du morceau qui la correspond.

    J'ai fais cette requête en sql (sous php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Morceaux.Nom_Morceau As Morceau, Groupes.Nom_Groupe As Groupe, Tablature.ID_Morceau As TabMorceau
    		FROM Morceaux 
    			(INNER JOIN Groupes
    				ON Morceaux.ID_Groupe = Groupes.ID_Groupe)
    			INNER JOIN Tablature
    				ON Morceau.ID_Morceau = Tablature.ID_Morceau
    Mais ça ne marche pas... j'ai tenté plusieurs synthaxe différente, mais là je commence à croire qu'en fait ce n'est pas possible ce genre de liaison?
    Car par la suite, j'aimerai en plus inclure la tablature utilisateur, qui contient le nom de la personne qui a posté la tablature.

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Votre requête me paraît correcte (hormis les parenthèses inutiles, mais pas de raison que ça fasse planter celle-ci).

    C'est du MySQL derrière ?
    Avez-vous exécuté votre requête dans phpMyAdmin ?

    Edit : il manque un x à la table morceaux dans la seconde jointure.

    Voici votre requête en utilisant les alias de tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
        Mr.Nom_Morceau AS Morceau,
        Gr.Nom_Groupe  AS Groupe,
        Tb.ID_Morceau  AS TabMorceau
    FROM
        Morceaux Mr 
        INNER JOIN Groupes Gr
          ON Gr.ID_Groupe = Mr.ID_Groupe
        INNER JOIN Tablature Tb
          ON Tb.ID_Morceau = Mr.ID_Morceau;

  3. #3
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    En dehors du fait qu'il manque la clause WHERE pour sélectionner l'ID tablature voulue, je ne vois pas pourquoi ça ne marcherait pas.

    Quel est le résultat obtenu par cette requête ?
    - Erreur ?
    - Pas le résultat attendu ?

    Avec des alias pour rendre la requête plus facile à lire, en supprimant les parenthèses inutiles et avec la clause WHERE, ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT m.Nom_Morceau AS Morceau, 
      g.Nom_Groupe AS Groupe, 
      t.ID_Morceau AS TabMorceau
    FROM Morceaux AS m
    INNER JOIN Groupes AS g ON m.ID_Groupe = g.ID_Groupe
    INNER JOIN Tablature AS t ON m.ID_Morceau = t.ID_Morceau
    WHERE ID_tablature = 12

    Pas ailleurs, cette histoire de tablatures peut m'intéresser.
    C'est quel site ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Tu avais raison Waldar, vos requêtes fonctionnent aussi! Grand merci à vous deux!

    Sinon, pour répondre à ta question CinePhil, je prépare un projet pour mon bts en alternance en informatique de gestion. Et comme je suis fana de musique, je compte faire un site de partage de tablature de batterie Grâce à vous, je vais pouvoir le continuer!

    Je le mettrai en ligne une fois terminé et avec un bon design (là où je suis une...)

  5. #5
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Unreal Time Voir le message
    je compte faire un site de partage de tablature de batterie
    Dommage ! Moi c'est la guitare. Je ne savais pas qu'il y avait des tablatures pour batterie.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Dommage ! Moi c'est la guitare. Je ne savais pas qu'il y avait des tablatures pour batterie.
    Le problème pour les partitions de guitare, c'estau niveau de la l'égalité, je voulais au départ faire pour tout les instruments (même l'orgue!) mais la cnil a été claire sur ce point. J'ai trouvé une petite faille pour la batterie

    Sinon, je voulais savoir, est-ce que je peux avoir deux from qui sont liés?
    J'explique :
    Je reprend le MCD de tout à l'heure, et je lui ajoute la table

    Comptes_Utilisateurs
    ID_Utilisateur
    Nom_Utilisateur

    Tablature
    ID_Tablature
    ID_Utilisateur (fk)

    Et là, j'aimerai qu'en récupérant les informations du morceaux, et du groupes, que je puisse demander de me sortir le nom de l'utilisateur par rapport à son ID_Utilisateur.

    Je comptais faire un truc dans ce genre, mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT m.Nom_Morceau AS Morceau, g.Nom_Groupe AS Groupe, c.Nom_Utilisateur
    FROM Morceaux AS m
    	INNER JOIN Groupes AS g ON m.ID_Groupe = g.ID_Groupe
    	INNER JOIN Tablature AS t ON m.ID_Morceau = t.ID_Morceau
    FROM t
    	INNER JOIN Comptes_Utilisateurs As c ON t.ID_Utilisateur = c.ID_Utilisateur
    Merci encore

  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Tu ne peux avoir qu'un seul FROM mais autant de JOIN que tu veux.
    Ton second FROM est inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.Nom_Morceau AS Morceau, g.Nom_Groupe AS Groupe, c.Nom_Utilisateur
    FROM Morceaux AS m
    INNER JOIN Groupes AS g ON m.ID_Groupe = g.ID_Groupe
    INNER JOIN Tablature AS t ON m.ID_Morceau = t.ID_Morceau
      INNER JOIN Comptes_Utilisateurs AS c ON t.ID_Utilisateur = c.ID_Utilisateur

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Ouaaaaaaaaaah! C'est trop puissant le sql!
    Merci ça marche o_o je pensais pas que ce serait si simple!


  9. #9
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Unreal Time Voir le message
    Ouaaaaaaaaaah! C'est trop puissant le sql!
    Merci ça marche o_o je pensais pas que ce serait si simple!

    Et encore, tu n'as rien vu !
    Mais tout n'est pas si simple !

    Un lien à mettre en favoris pour en apprendre beaucoup plus :
    http://sqlpro.developpez.com/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DW 8 & antérieurs] Coloriser une function perso, voir plus.
    Par nestoyeur dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 10/07/2009, 14h21
  2. Projet(s) à 2 voir plus sur Lyon
    Par Velvounet dans le forum Projets
    Réponses: 10
    Dernier message: 20/12/2008, 19h21
  3. Réponses: 2
    Dernier message: 26/09/2008, 11h58
  4. voir les tables virtuel deleted inserted
    Par berceker united dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/06/2006, 15h31
  5. [DEBUTANT]Voir les tables et la description des tables
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/05/2006, 10h02

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