Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requete Jointure

    12 janvier 2018 à 10:49:28

    Bonjour je débute en MySQL et je bloque sur une requête pour mon API, je m'explique j'utilise NodeJS avec un module je peux faire des requête à partir de ma BDD.

    Structure BDD :

    Table User                                                                   Table Domaine User

    ID : 5/2                                                                      Id : 1/2 (qui correspond a l'user ID de la table User),

    Name : test/test2                                                        Lieu: Paris/London

    Nickname : test/test2

    User_ID : 1/2

    Donc j'aimerai une requête qui me sort l'id, name, nickname de la table user avec l'id et le lieu de la table domaine user je galere à faire en sorte que l'user_id corresponde à l'ID de la table domaine user sauf que je me mange des erreurs, il faut prendre en compte la jointure et je débute ... merci d'avance.

    app.get('/api/:id.json', function (req, res) {
       connection.query('select id, name, nickname, id, lieu from user, domaine_user where id=user_id', [req.params.id], function (error, results, fields) {
         if (error) throw error;
         var user = results[0];
         if (user == undefined) {
             res.status(404);
             res.send({
                 code: 404,
                 message: "Not found"
             });
         } else {
             res.send({
                 code: 200,
                 message: 'success',
                 datas: results
             });
         }
    	});


    Pour les curieux voici mon code requete a changer : select id, name, nickname, id, lieu from user, domaine_user where id=user_id

    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2018 à 11:17:32

      Bonjour,

      KururoKariri a écrit:

      je débute en MySQL

      Alors autant partir sur des bases actualisées ... Même si ont les croise encore partout, les jointures avec la clause WHERE, c'est un peu "vieillot", on utilise maintenant plutôt la clause FROM et le mot clé JOIN qui permet d'améliorer la lisibilité des requêtes en ne laissant à la clause WHERE que les conditions de filtrage ...

      KururoKariri a écrit:

      sauf que je me mange des erreurs

      Je pense savoir lesquelles, mais tu aurais pu les préciser pour éviter de se poser la question ...

      Il est sûrement question d'"ambiguous column name in field list" (nom de colonne ambigu dans la liste des champs).

      Dans ton SELECT, tu précises deux fois une colonne id ... MySQL ne peut pas deviner laquelle afficher puisque ce nom de colonne apparaît dans deux tables. Il faut donc, soit préciser quelle table, soit utiliser des alias pour clarifier la lecture du SQL :

      En reprenant mes remarques, la requête serait :

      SELECT
      	U.id AS id_user,
      	U.name,
      	U.nickname,
      	D.id AS id_domain,
      	D.lieu
      FROM
      	`user` U
      		INNER JOIN domaine_user D
      			ON U.id = D.user_id

      Tu remarqueras les quotes obliques autour du nom de table user ... USER est un mot clé réservé MySQL, et l'utiliser comme nom de table n'est pas une bonne idée, car cela peut prêter à confusion dans certaine situation voire retourner des erreurs ... à éviter donc ... si tu peux encore renommer cette table fais-le, sinon pense aux quotes obliques ;)

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

      Requete Jointure

      × 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