Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL] Joindre 2 table via un id sur PhpMyAdmin

Sujet résolu
    9 mai 2019 à 11:35:01

    Bonjour

    Je cherche à ajouter une colonne de ma table B à ma table A si elles ont une colonne (id) commune.

    Je n'arrives pas à le faire.. Malgré mes recherches

    Quelqu'un pour m'aider svp?

    Ecriture de ma configuration BDD:

    ST_catalogue_engin(id_engin,nom_engin_id_type,nom_type,lien_img)

    ST_type_engin(id_type,intitule)

    ST_catalogue_engin[id_type]  C  ST_type_engin[id_type]

    Et j'aimerais que ST_catalogue_engin[nom_type] prenne la valeur de ST_type_engin[intitule] si ST_catalogue_engin[id_type] == ST_type_engin[id_type).

    Illustration de ma table A (ST_catalogue_engin):

    Illustration de ma table B (ST_type_engin):

    Quelqu'un saurez y faire?

    Merci beaucoup!!

    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2019 à 12:09:41

      Bonjour,

      Il ne faut surtout pas créer une colonne nom_type dans la table engin ... c'est de la redondance de données inutile ...

      Il te suffit de faire une jointure ... c'est un peu la base du SQL ...

      SELECT
          E.id_engin,
          E.nom_engin,
          T.intitule AS type_engin,
          E.lien_img
      FROM
          ST_catalogue_engin E
              INNER JOIN ST_type_engin T
                  ON E.id_type = T.id_type

      -
      Edité par Benzouye 9 mai 2019 à 12:10:08

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        9 mai 2019 à 12:48:54

        Merci de votre réponse rapide, j'apprécie!

        J'ai bien compris ta requête, que j'ai adapté:

        SELECT
            ST_catalogue_engin.id_engin,
            ST_catalogue_engin.nom_engin,
            ST_type_engin.id_type AS id_typeengin,
            ST_type_engin.intitule AS intitule_typeengin,
            ST_catalogue_engin.lien_img
        	
        FROM
            ST_catalogue_engin
                INNER JOIN ST_type_engin
                    ON ST_catalogue_engin.id_type = ST_type_engin.id_type
        
        Elle m'affiche exactement ce que je souhaites:

        En revanche, est-il pas possible de le faire automatiquement, que ST_catalogue_engin, soit tout le temps comme cela? Je pense que ça faciliterait les actions que j'ai à faire sur ces tables. Dans le sens où cette requête se fera uniquement sur phpmyadmin et pas dans mes codes php?

        Dans un exemple:

        Au lieu de devoir écrire:

         $req = $bdd->query("
                                SELECT
                                    ST_catalogue_engin.id_engin,
                                    ST_catalogue_engin.nom_engin,
                                    ST_type_engin.id_type AS id_typeengin,
                                    ST_type_engin.intitule AS intitule_typeengin,
                                    ST_catalogue_engin.lien_img
                                FROM
                                    ST_catalogue_engin
                                        INNER JOIN ST_type_engin
                                            ON ST_catalogue_engin.id_type = ST_type_engin.id_type");
                                // On affiche le resultat
                                while ($donnees = $req->fetch()) {
                                    //On affiche les données dans le tableau
                                    echo "</tr>";
                                    echo "<td><b>".$donnees['nom_engin']."</b></td>";
                                    echo "<td>".$donnees['intitule_typeengin']."</td>";
                                    //Permet de mettre la photo que si le lien existe
                                    if(isset($donnees['lien_img'])){
                                      if($donnees['lien_img'] == "" OR empty($donnees['lien_img'])){
                                        echo "<td></td>";
                                      }
                                      else{
                                        echo "<td><center><img src='images/catalogue_engin/".$donnees['lien_img']."' width='100px'></center> </td>";
                                      }
                                    }
                                    echo "</tr>";
                                }
                                ?>

        Ce qui fonctionne parfaitement.

        J'aimerais pouvoir écrire seulement:

         $req = $bdd->query("SELECT * FROM ST_catalogue_engin");
                                // On affiche le resultat
                                while ($donnees = $req->fetch()) {
                                    //On affiche les données dans le tableau
                                    echo "</tr>";
                                    echo "<td><b>".$donnees['nom_engin']."</b></td>";
                                    echo "<td>".$donnees['intitule']."</td>";
                                    //Permet de mettre la photo que si le lien existe
                                    if(isset($donnees['lien_img'])){
                                      if($donnees['lien_img'] == "" OR empty($donnees['lien_img'])){
                                        echo "<td></td>";
                                      }
                                      else{
                                        echo "<td><center><img src='images/catalogue_engin/".$donnees['lien_img']."' width='100px'></center> </td>";
                                      }
                                    }
                                    echo "</tr>";
                                }
                                ?>

        Je ne sais pas, si ma question est assez explicite?

        Sinon, le problème principale est quand même résolu. Merci beaucoup!

        Merci,

        -
        Edité par ThéoLeao 9 mai 2019 à 13:00:44

        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2019 à 13:11:24

          Tu ne pourras pas faire cela sans jointure, MySQL ne peut pas deviner que tu veux "remplacer" l'id par l'intitulé ...

          Après, dans ton cas précis, tu as des syntaxes plus simples.

          Avec USING :

          SELECT
              E.id_engin,
              E.nom_engin,
              T.id_type AS id_typeengin,
              T.intitule AS intitule_typeengin,
              E.lien_img
          FROM
              ST_catalogue_engin E
                  INNER JOIN ST_type_engin T
                      USING( id_type )

          Ou encore plus direct avec NATURAL :

          SELECT
              E.id_engin,
              E.nom_engin,
              T.id_type AS id_typeengin,
              T.intitule AS intitule_typeengin,
              E.lien_img
          FROM
              ST_catalogue_engin E
                  NATURAL JOIN ST_type_engin T

          -
          Edité par Benzouye 9 mai 2019 à 13:11:37

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            9 mai 2019 à 13:50:42

            Ah très bien, je pensais que c'était possible.

            Super, en tout cas je te remercie pour le temps que tu as pris à me répondre et la clarté de tes réponses.

            Je passe le sujet en résolu ;)

            Bonne journée à toi!

            -
            Edité par ThéoLeao 9 mai 2019 à 13:50:59

            • Partager sur Facebook
            • Partager sur Twitter

            [SQL] Joindre 2 table via un id sur PhpMyAdmin

            × 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