Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL/table d'associations

Requête SQL por une relation n/n

Sujet résolu
    20 septembre 2020 à 22:14:14

    Bonjour, j'aurais besoin de votre aide pour obtenir les données dans une table.

    Je m'explique : Je travaille sur une application web/JEE de gestion de projets dans une entreprise. J'ai une table emlpoyee, j'ai une table projects, et j'ai une table project_assos (qui est la table d'association, car je pense qu'il est nécessaire d'avoir une table d'associations, non ?)

    Je voudrais obtenir la liste des employés ayant travaillé sur un projet lorsque l'on clique sur le projet. Et inversement, lors d'une autre requête, la liste des projets sur lequel a travaillé un employé lorsque l'on clique sur le nom d'un employé.

    Mon soucis est que je n'arrive pas à trouver le bonne requête SQL pour faire ce dont j'ai besoin. Une table d'associations est nécessaire pour faire ça non ?

    Pourriez-vous m'aider s'il vous plaît ?

    Je vous met les captures d'écran de ma BDD pour mieux visualiser :

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2020 à 23:47:56

      Bonjour,

      Dans l'exemple de données, il semblerait qu'un projet ne soit lié qu'à un seul employé... c'est bien le cas ?

      Ou un projet peut être lié à plusieurs employés ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        21 septembre 2020 à 17:31:08

        Bonjour ! Tout d'abord pour votre réponse et pour porter attention à mon problème.

        Effectivement un projet peut être lié à plusieurs employés. Je pensais être arrivé à le représenter grâce à cette table, la table "project_assos" : 

        Dans laquelle les employés ayant l'ID 1, 2, 3 et 4 travaillent sur le projet portant l'ID 1. Ou alors je me suis trompé ?

        De plus je me rend compte de mon erreur, cette table ne fonctionnera peut-être pas correctement car plusieurs employés peuvent travailler sur un projet, mais un employé peut aussi travailler sur plusieurs projets..

        (je m'excuse j'aurais dû préciser le nom des tables au-dessus des images)

        • Partager sur Facebook
        • Partager sur Twitter
          21 septembre 2020 à 17:43:09

          Mm88 a écrit:

          Ou alors je me suis trompé ?

          Non c'est moi qui avait lu la table à l'envers, par contre cela signifie qu'avec cet exemple de données, un employé ne suit qu'un seul projet ... Mais je pense que c'est juste ton "petit" exemple qui induit cela mais que ce ne sera pas le cas avec plus de données ... non ?

          Sinon, pour ta question de départ, je suis un peu perplexe ... On parle simplement ici de jointure, ce qui est un peu la base du SQL ...

          As-tu une formation SQL ? As-tu cherché un peu ?

          Rapidement :

          -- la liste des employés ayant travaillé sur un projet
          SELECT E.*
          FROM
          	employee E
          		INNER JOIN project_assos EP
          			ON E.idemployee = EP.fk_idemployee
          WHERE EP.fk_idprojects = 'id du projet cliqué';
          
          -- la liste des projets sur lequel a travaillé un employé
          SELECT P.*
          FROM
          	projects P
          		INNER JOIN project_assos EP
          			ON P.idprojects = EP.fk_idprojects
          WHERE EP.fk_idemployee = 'id employé cliqué';

          -
          Edité par Benzouye 21 septembre 2020 à 20:30:30

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            21 septembre 2020 à 18:20:07

            Oui  exactement c'est tout à fait ça ! J'ai rajouté quelques entrées à ma table afin que je puisse avoir les deux cas (un employé sur plusieurs projets, plusieurs employés sur un seul projet).

            J'avais cherché oui, et j'avais essayé en faisant avec une jointure parce qu'il me semblait bien que c'était ce dont j'avais besoin mais j'étais vraiment pas sûr car je n'arrivais pas à obtenir la bonne syntaxe.. En fait j'avais souvent des résultats faussés par exemple tous les projets étaient sur la ligne de chaque employé. Ou encore les mêmes lignes répétées plusieurs fois..

            Pour ma formation je suis en formation JEE. Et le temps de formation a été très réduit du coup ben....BDD/SQL en à peine 3 jours. En comptant le temps de mettre en place et configurer Workbench+serveur SQL pour tout le monde, à distance, il nous restait plus grand chose donc on a vraiment pas passé beaucoup de temps sur les jointures..

            En tout cas je te remercie beaucoup c'est exactement ce dont j'avais besoin : ) ! Est-ce que ça te dérangerait de m'expliquer rapidement ce sont les E, P, et EP ? Ou alors un lien si tu préfères ? Car la première commande fonctionne parfaitement pour trouver les employés ayant travaillé sur un projet, mais lorsque j'exécute la deuxième j'ai ça en réponse : 

            Je suppose que E est pour un employé, P pour un projet et EP une association projet/employé ?

            C'est bon j'ai trouvé pour la deuxième commande. J'étais sur de l'UML, je suis revenu dessus pour voir et j'ai trouvé ce qu'il manquait pour que la deuxième commande fonctionne aussi. Merci beaucoup pour ton aide : ) !

            -
            Edité par Mm88 21 septembre 2020 à 19:37:19

            • Partager sur Facebook
            • Partager sur Twitter
              21 septembre 2020 à 20:32:02

              E, P, et EP sont des alias (noms de remplacement) qui permettent de simplifier l'écriture de la requête...

              Concernant l'erreur, c'est une faute de frappe de ma part, j'ai édité mon message précédent pour corriger l'erreur.

              Enfin, un cours de BDD qui passe à côté des jointures... plutôt moyen...

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                21 septembre 2020 à 21:23:40

                Ah oui j'y avais pensé mais quand j'avais utilisé des alias sur une grosse commande SQL dans un script PHP c'était avec "AS" devant alors j'hésitais..

                Je vais essayer de te montrer mais on voit pas grand chose et il ne me reste rien de plus clair pour ce script. C'était pour une application Android il y a deux ans..

                Pas de soucis t'inquiètes pas ! C'est déjà sympa de m'avoir aidé.

                Je suis bien d'accord. En fait les jointures on les a eu en tant que bonus. Sauf qu'après on a enchaîné sur le JEE et les framework Java, qui ont été très condensé aussi (Maven + Hibernate + Struts en 10 jours), ben les bonus on a pas vraiment eu le temps quoi.. Mais au moins maintenant je saurais les réutiliser !

                • Partager sur Facebook
                • Partager sur Twitter

                SQL/table d'associations

                × 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