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 :

get Sql table multiple


Sujet :

Langage SQL

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Manche (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut get Sql table multiple
    Bonjour à tous, j'essaie depuis deux jour de trouver une solution et j'ai essayé différente requête mais rien y fait.
    je veux récupérer des informations dans deux tables en meme temps dans une Bdd SQLITE avec node.js.

    voici mes tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    db.run(`CREATE TABLE User( pseudo TEXT, status TEXT, mail TEXT, password TEXT,PRIMARY KEY (mail))`);
    db.run(`CREATE TABLE ProfilTeacher(mail TEXT, firstname TEXT , adminAcceptance TEXT, description TEXT, ProfilImgPath TEXT, PRIMARY KEY (mail))`);
    et pour le moment voici ma requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    db.each(`SELECT mail FROM User`,(err,data) =>{
                if(err) return console.error(err.message);
                if(data.mail === req.body.message) return db.get(`SELECT User.pseudo, ProfilTeacher.firstname, ProfilTeacher.description, ProfilTeacher.ProfilImgPath FROM User CROSS JOIN ProfilTeacher WHERE User.mail = "${req.body.message}"`,(err,data) =>{
                    if(err)
                        throw err
     
                    res.send(data);   
                });
    du coup il me renvoi bien les donnés filtrées de la table User mais il me donne la premiere ligne de la Table ProfilTeacher.
    j'ai essayer d'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    , ProfilTeacher.mail = "${req.body.message}"
    dans le WHERE mais ca plante.

    bonne journée

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 453
    Par défaut
    Bonjour,
    Tu fais un CROSS-JOIN dans la requête, donc un produit cartésien. C'est voulu ?
    Ce ne serait pas plutôt un INNER JOIN (ou un LEFT OUTER JOIN) qu'il faudrait ici ?

    Accessoirement, "ça plante" ne nous aide pas vraiment…

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Manche (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut
    Je ne veux pas faire de produit cartésien, je veux juste
    Select "certaines valeur" From "table 1 et 2" Where "mail = quelquechose"
    XD quand je l 'écrit comme ça c est super simple mais j y arrive pas

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 453
    Par défaut
    C'est super simple, mais vu d'ici ce n'est pas clair.
    Il faudrait nous fournir un jeu d'essai et le résultat attendu.

    Tatayo.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Manche (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut
    me revoila

    alors voici les donnés de mes deux tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    Table User
    {
      pseudo: 'genial',
      status: 'Professeur',
      mail: 'leprof@cool.fr',
      password: 'azertyuiop!8'
    }
    {
      pseudo: 'jeveuxsavoir',
      status: 'Apprenant',
      mail: 'lenouveau@apprenant.fr',
      password: 'poiuytreza!7'
    }
    {
      pseudo: 'azerty',
      status: 'Professeur',
      mail: 'azer@zer.fr',
      password: 'azertyuiop!8'
    }
    {
      pseudo: 'test',
      status: 'Professeur',
      mail: 'test@test.fr',
      password: 'test!8888'
    }
    {
      pseudo: 'test',
      status: 'Professeur',
      mail: 'test2@test.fr',
      password: 'test!5555'
    }
     
     
    Table ProfilTeacher
    {
      mail: 'leprof@cool.fr',
      firstname: 'le prof',
      adminAcceptance: 'waiting',
      description: 'je suis super gentil souvenez vous en!!',
      ProfilImgPath: '1649927051835-shootings-photo-de-profil-reseaux-sociaux-et-professionnel-a-colmar_014.jpg'
    }
    {
      mail: 'azer@zer.fr',
      firstname: 'azertyu',
      adminAcceptance: 'waiting',
      description: 'content',
      ProfilImgPath: null
    }
    {
      mail: 'test@test.fr',
      firstname: 'testr',
      adminAcceptance: 'waiting',
      description: 'tesrdezsd',
      ProfilImgPath: null
    }
    {
      mail: 'test2@test.fr',
      firstname: 'test',
      adminAcceptance: 'waiting',
      description: 'zertyui',
      ProfilImgPath: '1650012562971-B_gras_italic.jpg'
    }
    si je fais une requête avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    req.body.message = test2@test.fr
    la réponse que j'obtiens est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {
      pseudo: 'test',
      firstname: 'le prof',
      description: 'je suis super gentil souvenez vous en!!',
      ProfilImgPath: '1649927051835-shootings-photo-de-profil-reseaux-sociaux-et-professionnel-a-colmar_014.jpg'
    }
    alors que je voudrai obtenir la ligne associé à l'email dans les deux tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    {
      pseudo: 'test',
      firstname: 'test',
      description: 'zertyui',
      ProfilImgPath: '1650012562971-B_gras_italic.jpg'
    }
    voila en espérant que ça aide plus a comprendre mon problème

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Manche (Basse Normandie)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 24
    Par défaut
    c'est tous bon pour moi la requête était simplement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  User.pseudo, ProfilTeacher.firstname, ProfilTeacher.description, ProfilTeacher.ProfilImgPath FROM User , ProfilTeacher WHERE user.mail = {mavariable} AND ProfilTeacher.mail = {mavariable}
    il me fallait juste un AND

    finalement avec le relationnel c'est bien un LEFT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT User.pseudo, ProfilTeacher.firstname, ProfilTeacher.description, ProfilTeacher.ProfilImgPath FROM User LEFT JOIN ProfilTeacher ON ProfilTeacher.mail = User.mail WHERE User.mail = {mavariable}"
    un avis sur ce qui est le mieux ?

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pour ce besoin, il faut utiliser une jointure.

    Les jointures se codent avec l'opérateur JOIN.
    Selon le besoin, on utilise une jointure interne (INNER JOIN), externe (LEFT/RIGHT/FULL OUTER JOIN) et parfois le produit cartésien (CROSS JOIN).

    Si vous voulez la liste des données uniquement si des informations se trouvent dans l'une et l'autre table, alors il faut utiliser une jointure INNER. Si vous voulez les données de la table user même en l'absence de données correspondantes dans la table profil alors il faut utiliser une jointure OUTER.

    La jointure est un concept fondamental de la théorie relationnelle, sa mise en oeuvre en langage SQL est expliquée dans les différents tutoriels accessibles ICI

    Une requête SQL est plus facile à lire et donc à maintenir quand elle est présentée avec soin, les retours à la ligne sont les bienvenus.
    Et aussi, quand on utilise plusieurs tables dans une même requête (et donc des jointures), il est préférable d'utiliser des alias plutôt que de nommer les tables ou vues in extenso.

    Ce qui donne dans votre cas :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select US.pseudo
         , PT.firstname
         , PT.description
         , PT.ProfilImgPath
    from user as US
    inner join ProfilTeacher as PT
       on PT.mail = US.mail
    where US.mail = @mavariable

Discussions similaires

  1. Table liée Sql Server + multiple utilisateurs
    Par nesswaw dans le forum Access
    Réponses: 1
    Dernier message: 06/11/2014, 15h56
  2. [SQL] Pb conditions sur tables multiples
    Par guitou12 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/08/2006, 13h49
  3. Réponses: 6
    Dernier message: 09/05/2006, 10h21
  4. requete sql pour bd access97 a tables multiples
    Par waspy59 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2006, 00h11
  5. Requete SQL (Table PARADOX) et LCK...
    Par asenaici dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/11/2004, 12h00

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