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

PHP & Base de données Discussion :

perdu avec toutes ces jointures [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut perdu avec toutes ces jointures
    Bonsoir,

    j'ai 4 tables reliées par des clés étrangères et je cherche à obtenir une information d'une de ces tables étant donné une condition (clause WHERE) sur une donnée d'une autre table. La requête que j'ai essayée donne une erreur et je ne sais pas la corriger. Merci de l'aide.

    La donnée recherchée est la company d'un user dont on donne l'identifiant :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CO.CO_company FROM `li_license` LI
    JOIN us_user US ON LI.US_ident = US.US_ident
    JOIN usl_user_license USL ON USL.US_ident=US.US_ident
    JOIN co_company CO ON CO.CO_ident=USL.CO_ident
    WHERE `US.US_sesa` = 27384

    Code sql : 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
    CREATE TABLE CO_company(
       CO_ident INT UNSIGNED AUTO_INCREMENT,
       CO_company VARCHAR(50) NOT NULL,
       PRIMARY KEY(CO_ident)
    );
     
    CREATE TABLE US_user(
       US_ident INT UNSIGNED AUTO_INCREMENT,
       US_sesa INT,
       US_firstname VARCHAR(50),
       US_lastname VARCHAR(50),
       PRIMARY KEY(US_ident),
       UNIQUE(US_sesa)
    );
     
    CREATE TABLE USL_user_license(
       US_ident INT UNSIGNED,
       US_ident_manager INT UNSIGNED,
       COU_ident INT UNSIGNED,
       LO_ident INT UNSIGNED,
       CO_ident INT UNSIGNED NOT NULL,
       PRIMARY KEY(US_ident),
       FOREIGN KEY(US_ident) REFERENCES US_user(US_ident),
       FOREIGN KEY(US_ident_manager) REFERENCES USL_user_license(US_ident),
       FOREIGN KEY(COU_ident, LO_ident) REFERENCES LO_location(COU_ident, LO_ident),
       FOREIGN KEY(CO_ident) REFERENCES CO_company(CO_ident)
    );
     
    CREATE TABLE LI_license(
       LI_ident INT UNSIGNED AUTO_INCREMENT,
       LI_activate_date DATE NOT NULL,
       LI_deactivate_date DATE,
       AP_ident INT UNSIGNED NOT NULL,
       US_ident INT UNSIGNED NOT NULL,
       PRIMARY KEY(LI_ident),
       FOREIGN KEY(AP_ident) REFERENCES AP_application(AP_ident),
       FOREIGN KEY(US_ident) REFERENCES USL_user_license(US_ident)
    );

    Error Code: 1054. Unknown column 'US.US_sesa' in 'where clause'
    Je pense inutile de donner la structure des autres tables référencées par des clés étrangères mais non impliquées dans la requête.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    WHERE `US.US_sesa` = 27384

    Là tu dis : "dont le champ « US.US_sesa » vaut 27384"
    Alors que tu voulais plutôt dire "dont le champ « US_sesa » de « US » vaut 27384"
    Corrige tes backticks (tu peux les supprimer)

    Attention également à la casse, tu crées US_user mais dans ta requête tu utilises us_user, sur certains systèmes tu auras un "la table n'existe pas"

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CO.CO_company FROM li_license LI
    JOIN us_user US ON LI.US_ident = US.US_ident
    JOIN usl_user_license USL ON USL.US_ident=US.US_ident
    JOIN co_company CO ON CO.CO_ident=USL.CO_ident
    WHERE US.US_sesa = 27384

    Les backticks étaient là car j'étais parti du script d'insertion généré par MySQLWorkbench...

    La différence de casse vient du fait que dans mon script de création de table, j'utilise des majuscules mais que la table créée par MySQLWorkbench ne contient que des minuscules...Apparemment, sur mon serveur (local et sur Windows10), MySQL n'est pas sensible à la casse.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Apparemment, sur mon serveur (local et sur Windows10), MySQL n'est pas sensible à la casse.
    Ça va poser problème dès que tu seras sur du Linux. Ton script n'est pas portable.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    En effet ; en faisant une petite recherche, j'ai trouvé https://alberton.info/dbms_identifie...nsitivity.html qui confirme ce que tu dis.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Split cellule avec ; puis comparaison à un intervalle de toutes ces valeurs
    Par vb_noob dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/02/2014, 13h20
  2. Réponses: 15
    Dernier message: 24/10/2005, 09h04
  3. lenght marche avec tout les navigateurs?
    Par Death83 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 21/09/2005, 15h09
  4. Perdu dans tous ces framework, mvc, et template
    Par __fabrice dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/09/2005, 12h00
  5. Perdu avec la communication avec le port serie
    Par gilles641 dans le forum Langage
    Réponses: 8
    Dernier message: 23/08/2005, 20h11

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