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

Requêtes MySQL Discussion :

Afficher l'email du manager [MySQL-8.0]


Sujet :

Requêtes MySQL

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 495
    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 495
    Billets dans le blog
    1
    Par défaut Afficher l'email du manager
    Bonjour,

    j'ai une requête fonctionnelle qui permet d'afficher l'email de l'utilisateur :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ALL EM.EM_email AS user_mail from us_user US 
    INNER JOIN USL_user_license AS USL ON USL.US_ident = US.US_ident -- On cherche les licences de l'utilisateur
    INNER JOIN em_mail AS EM ON EM.US_ident=USL.US_ident
    where  US.US_sesa=100008

    J'ai rajouté une nouvelle jointure (aux lignes 3 et 5 de la deuxième requête) pour afficher en plus l'email du manager, mais ce SELECT ne renvoie rien.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ALL EM.EM_email AS user_mail, EM_MANAGER.EM_email from us_user US 
    INNER JOIN USL_user_license AS USL ON USL.US_ident = US.US_ident -- On cherche les licences de l'utilisateur
    INNER JOIN US_user AS managers ON  USL.US_ident_manager = managers.US_ident -- On cherche les managers
    INNER JOIN em_mail AS EM ON EM.US_ident=USL.US_ident
    INNER JOIN em_mail AS EM_MANAGER ON EM_MANAGER.US_ident=managers.US_ident
    where  US.US_sesa=100008

    Les DDL :
    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
    CREATE TABLE `em_mail` (
      `EM_ident` int unsigned NOT NULL AUTO_INCREMENT,
      `EM_email` varchar(80) NOT NULL,
      `US_ident` int unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`EM_ident`),
      UNIQUE KEY `US_ident` (`US_ident`),
      CONSTRAINT `em_mail_ibfk_1` FOREIGN KEY (`US_ident`) REFERENCES `us_user` (`US_ident`)
    ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
     
    CREATE TABLE `us_user` (
      `US_ident` int unsigned NOT NULL AUTO_INCREMENT,
      `US_sesa` int DEFAULT NULL,
      `US_firstname` varchar(50) DEFAULT NULL,
      `US_lastname` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`US_ident`),
      UNIQUE KEY `US_sesa` (`US_sesa`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
     
    CREATE TABLE `usl_user_license` (
      `US_ident` int unsigned NOT NULL,
      `US_ident_manager` int unsigned NOT NULL,
      `COU_ident` int unsigned DEFAULT NULL,
      `LO_ident` int unsigned DEFAULT NULL,
      `CO_ident` int unsigned NOT NULL,
      PRIMARY KEY (`US_ident`),
      KEY `US_ident_manager` (`US_ident_manager`),
      KEY `COU_ident` (`COU_ident`,`LO_ident`),
      KEY `CO_ident` (`CO_ident`),
      CONSTRAINT `usl_user_license_ibfk_1` FOREIGN KEY (`US_ident`) REFERENCES `us_user` (`US_ident`),
      CONSTRAINT `usl_user_license_ibfk_2` FOREIGN KEY (`US_ident_manager`) REFERENCES `us_user` (`US_ident`),
      CONSTRAINT `usl_user_license_ibfk_3` FOREIGN KEY (`COU_ident`, `LO_ident`) REFERENCES `lo_location` (`COU_ident`, `LO_ident`),
      CONSTRAINT `usl_user_license_ibfk_4` FOREIGN KEY (`CO_ident`) REFERENCES `co_company` (`CO_ident`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

    Pouvez-vous me dire où est mon erreur ?

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    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 495
    Billets dans le blog
    1
    Par défaut
    L'erreur, c'est que cet email n'est pas renseigné dans la bdd

    Je dois donc commencer par une requête d'insertion.

    Voici ce que j'ai mis au point :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO em_mail
    (   EM_email
       ,   US_ident
    )
    SELECT ALL  'rrr'
        ,   US.US_ident_manager
    FROM    usl_user_license AS  USL
    INNER JOIN us_sesa AS US ON US.US_ident=USL.US_ident_manager
    WHERE US.US_sesa=100008
    J'ai mis n'importe quoi pour alimenter la colonne EM_email car on s'en fiche pour la mise au point. Par contre, pour alimenter la colonne US_ident, j'utilise un SELECT avec une jointure. Mais ça me dit "erreur SQL". Qu'est-ce qui va pas ?

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    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 495
    Billets dans le blog
    1
    Par défaut
    Pour simplifier, j'ai d'abord tenté de faire uniquement le SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ALL  USL.US_ident_manager
    FROM    usl_user_license AS  USL
    INNER JOIN us_user AS US ON US.US_ident=USL.US_ident_manager
    WHERE US.US_sesa=100008
    J'attend comme résultat 2, mais c'est vide. Pourquoi ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 470
    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 470
    Par défaut
    Bonjour,
    Je ne sais pas si c'est une erreur de copier/coller, mais ces deux lignes sont "identiques":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INNER JOIN em_mail AS EM ON EM.US_ident=USL.US_ident
    INNER JOIN em_mail AS EM_MANAGER ON EM_MANAGER.US_ident=managers.US_ident
    Seul l'alias change, les critères de jointure/filtre sont les mêmes.

    Ensuite tu inserts des lignes dans la table em_email, mais celle-ci n'apparait pas dans tes requêtes.
    Et l'erreur vient peut-être du SELECT ALL ?

    Tatayo.

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 495
    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 495
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse.

    Les critères de jointure ne sont pas tout-à-fait les mêmes car je relie la table em_mail à 2 tables différentes : USL_user_license et US_user (cf post #1). L'objectif est de sélectionner 2 emails : celui de l'utilisateur (table USL_user_license ) et celui de son manager (table US_user).

    Le ALL est la valeur par défaut de l'attribut du SELECT. SELECT et SELECT ALL, ça revient au même. https://www.microfocus.com/documenta...RRHSQCL03.html

    Citation Envoyé par tatayo Voir le message
    Ensuite tu inserts des lignes dans la table em_email, mais celle-ci n'apparait pas dans tes requêtes.
    Que veux-tu dire ?

    En fait, comme le INSERT ne fonctionnait pas, j'ai d'abord essayé de mettre au point un simple SELECT (post #3) mais même celui-là ne retourne rien...

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 470
    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 470
    Par défaut
    Autant pour moi pour la jointure, je ne dois pas avoir les yeux en face des trous (retour de vacance, tout çà ).
    Est-ce que tu peux nous fournir un jeu de test ?

    Tatayo.

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

Discussions similaires

  1. [eZ Publish] afficher l'email de l'inscript
    Par cirdec49 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 15/07/2010, 11h45
  2. [SP-2007] Récupérer l'adresse email du manager
    Par sguedon dans le forum SharePoint
    Réponses: 3
    Dernier message: 18/05/2009, 11h10
  3. Afficher les emails
    Par snyfir dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2008, 14h28
  4. Enregistrer + afficher + envoi email =>
    Par toutoune.bifouille dans le forum Langage
    Réponses: 1
    Dernier message: 13/07/2007, 23h09
  5. Afficher un email outlook prêt à être envoyé
    Par Décibel dans le forum Access
    Réponses: 4
    Dernier message: 27/01/2006, 20h06

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