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 :

Requête avec jointure externe : réaction bizarre


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut Requête avec jointure externe : réaction bizarre
    Bonjour,
    J'ai deux tables une nommé utilisateur et l'autre compagnie

    dans une requete j'utilise une jointure de table.
    dans ma table j'ai deux utilisateur paul et jacques.

    quand je lance ma requête et que je change l'utilisateur j'ai que paul qui ressort avec l'id 1 sinon je test la requête avec jacques aucun résultat

    test avec paul = resultat
    test avec jacques = element vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT u.email_utilisateur email_utilisateur,u.prenom_utilisateur prenom_utilisateur,u.nom_utilisateur nom_utilisateur,s.nom_societe nom_societe,s.id_societe id_societe,
    									u.id_utilisateur id_utilisateur
                                FROM compagnie s
                                LEFT JOIN utilisateur u
                                ON u.ID_utilisateur = s.ID_societe
    							WHERE email_utilisateur = 'paul' AND password_utilisateur = '123456789'
    avez vous une idée

    voici la composition de mes 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
     
    CREATE TABLE Compagnie(
            id_societe        int (11) Auto_increment  NOT NULL ,
            nom_societe       Varchar (50) ,
            adresse_societe   Text ,
            cp_societe        Int ,
            ville_societe     Varchar (100) ,
            telephone_societe Int ,
            email_societe     Varchar (50) ,
            id_utilisateur    Int ,
            PRIMARY KEY (id_societe )
    )ENGINE=InnoDB;
     
     
    #------------------------------------------------------------
    # Table: Utilisateur
    #------------------------------------------------------------
     
    CREATE TABLE Utilisateur(
            id_utilisateur         int (11) Auto_increment  NOT NULL ,
            nom_utilisateur        Varchar (30) ,
            prenom_utilisateur     Varchar (30) ,
            email_utilisateur      Varchar (100) ,
            password_utilisateur   Varchar (100) ,
            date_ajout_utilisateur Date ,
            id_societe             Int ,
            PRIMARY KEY (id_utilisateur )
    )ENGINE=InnoDB;
     
    ALTER TABLE Compagnie ADD CONSTRAINT FK_Compagnie_id_utilisateur FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur(id_utilisateur);
    ALTER TABLE Utilisateur ADD CONSTRAINT FK_Utilisateur_id_societe FOREIGN KEY (id_societe) REFERENCES Compagnie(id_societe);

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Si les colonnes email_utilisateur et password_utilisateur appartiennent à la table utilisateur, il faut déplacer la restriction sur les valeurs de cette colonne dans la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  u.email_utilisateur     email_utilisateur
        ,   u.prenom_utilisateur    prenom_utilisateur
        ,   u.nom_utilisateur       nom_utilisateur
        ,   s.nom_societe           nom_societe
        ,   s.id_societe            id_societe
        ,   u.id_utilisateur        id_utilisateur
    FROM    compagnie   s
        LEFT JOIN 
            utilisateur u
            ON  u.ID_utilisateur        = s.ID_societe
            AND u.email_utilisateur     = 'paul' 
            AND u.password_utilisateur  = '123456789'
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Merci pour ta réponse,

    Donc j'ai testé mail pour le deuxième resultat j'ai toujours les champs en NULL mais nom_societe et id_societe est rempli

    Lors du test de ma requete cela me donne comme si il y a avait que l'utilisateur ayant l'ID 1 qui est associé a la société mais pas les autres

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Ce souci disparaitra après correction de votre autre sujet posté ici : http://www.developpez.net/forums/d15...n/#post8714407

    Par ailleurs c'est surprenant et dangereux de filtrer sur le mot de passe, moins vous manipulez les données sensibles moins vous les exposez à la fraude
    Sauf erreur de ma part un user = 1 et 1 seul mot de passe à un instant "t" donc faire une jointure sur le user, rend inutile l'ajout du mot de passe
    Vérifiez que le mot de passe est valide lors de la connexion, ne l'utilisez plus ensuite jusqu'à la prochaine connexion

  5. #5
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    En lisant en diagonale, je dirais que le critère de jointure n'est pas logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON u.ID_utilisateur = s.ID_societe
    Et devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON u.ID_societe= s.ID_societe
    Edit :

    En plus de ça personnellement pour un tel besoin je partirais de la table utilisateur et joindrais la table société, dans cette requête on recherche un utilisateur, la société n'est pas un ensemble qui sert de déterminant, mais juste une info supplémentaire à ramener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
    	u.email_utilisateur email_utilisateur,
    	u.prenom_utilisateur prenom_utilisateur,
    	u.nom_utilisateur nom_utilisateur,
    	s.nom_societe nom_societe,
    	s.id_societe id_societe,
    	u.id_utilisateur id_utilisateur
    FROM utilisateur u
    LEFT JOIN compagnie s
    	ON u.ID_societe = s.ID_societe
    WHERE 
    	u.email_utilisateur = 'paul' 
    	AND u.password_utilisateur = '123456789'
    Par contre comme l'ont dit les autres intervenant :

    C'est assez étrange d'avoir un password dans une close where, et ça me pique les yeux que ce dernier ne soit pas chiffré.

    Bonne journée

Discussions similaires

  1. Requête avec jointure externe
    Par Neuromancien2 dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/04/2008, 00h47
  2. Requête avec jointure externe complexe
    Par dpin33 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/03/2008, 13h41
  3. optimisation requête avec jointures externes
    Par beurtom dans le forum Oracle
    Réponses: 14
    Dernier message: 16/10/2006, 16h50
  4. requête avec jointure externe
    Par GMI3 dans le forum Oracle
    Réponses: 8
    Dernier message: 12/04/2006, 10h29
  5. Requête avec jointure externe
    Par claralavraie dans le forum Langage SQL
    Réponses: 8
    Dernier message: 02/02/2006, 08h34

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