Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jointure SQL

3 champs d'une même table rejoignent une même clé primaire

Sujet résolu
    18 novembre 2010 à 23:34:37

    Voici d'abord la requête que j'ai misérablement créée, que dois-je faire pour que ça fonctionne ?

    SELECT pr.id id_projet, pr.nom nom_projet, m.nom nom_createur, m.nom nom_correcteur, m.nom nom_utilisateur
    FROM projets pr
    JOIN membres m
    ON pr.id_createur = m.id
    AND pr.id_correcteur = m.id
    AND pr.id_utilisateur = m.id
    WHERE pr.id_createur = :createur
    

    Merci d'avance pour ceux qui prendront le temps de m'aider ;-)
    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2010 à 0:15:50

      Il faudrait décrire un peu mieux la situation. Qu'essaies-tu de faire ? Quelles sont tes tables ? Avec quelles données ?

      Si tu pouvais exporter ta table ainsi qu'un jeu d'essai, et qu'en fonction du jeu d'essai, tu nous dises ce que tu veux obtenir, il serait beaucoup plus facile de t'aider.

      Ta requête, en français, signifie de joindre la table projets et la table membres quand projets.id_createur, projet.id_correcteur et projet.id_utilisateur corresponde à la même personne, en gros. Est-ce bien ce que tu essaies de faire ?
      • Partager sur Facebook
      • Partager sur Twitter
        19 novembre 2010 à 1:21:04

        D'abord merci de prendre le temps de me répondre :honte:
        Voici la situation : un membre s'est préalablement identifié, il accède à une liste de ses projets, ses projets sont identifié dans la table "projets" par le champ "id_createur", dans cette même table nous avons l'id d'un autre membre, qui sera le correcteur de ce projet, identifié dans la table par "id_correcteur", etc... Je souhaite extraire de la table toutes mes données de la table "projets", mais avec à la place de l'id des membres, leur vrai nom correspondant au champ "nom" de la table "membres".

        Suis-je assez clair ? :euh:

        En gros voici un shéma ^^ (shéma qui s'autodétruira dans quelque temps):
        Image utilisateur
        • Partager sur Facebook
        • Partager sur Twitter
          19 novembre 2010 à 1:30:47

          Oui, ça me semble clair. Dans ce cas-ci, tu dois joindre 3 fois ta table membres parce que l'id réfère à des lignes différentes.

          SELECT pr.id id_projet, pr.nom nom_projet, cr.nom nom_createur, co.nom nom_correcteur, ut.nom nom_utilisateur
          FROM projets pr
          INNER JOIN membres cr
              ON pr.id_createur = cr.id
          INNER JOIN membres co
              ON pr.id_correcteur = co.id
          INNER JOIN membres ut
              ON pr.id_utilisateur = ut.id
          WHERE pr.id_createur = :createur;
          


          Dans ce cas-ci, c'est une jointure interne. Ça veut dire que la requête ne va sélectionner que les lignes où cr.id, co.id et ut.id ont une valeur renseignée (c'est-à-dire n'importe quoi qui a une correspondance dans la table membres). Tu peux faire une jointure externe (LEFT OUTER JOIN plutôt que INNER JOIN) si les trois colonnes ne sont pas toujours renseignées et que tu veux quand même sélectionner les lignes de la table projets.
          • Partager sur Facebook
          • Partager sur Twitter
            19 novembre 2010 à 1:39:20

            Rhoooo un grand grand merci pour m'avoir débloqué de cette situation, j'ignorais qu'on pouvait donner plusieurs alias à une même table !
            Encore merci !!!
            • Partager sur Facebook
            • Partager sur Twitter

            Jointure SQL

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown