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 :

Acceder à 2 valeurs d'un même champ en une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut Acceder à 2 valeurs d'un même champ en une requête
    Bonjour.

    J'ai un problème que je vais schématiser vulgairement sans rentrer dans les détails de mon modèle de données.

    Dans une table A, je stocke des informations sur mes utilisateurs:" ID, login, password,..."
    Dans une table B, je stocke les messages que les utilisateurs postent.

    Dans cette table B, j'ai:
    - l'ID du message <pk>
    - ID de l'utilisateur qui poste le message <fk> qui pointe sur la table A
    - ID de l'utilisateur à qui est destiné le message <fk> qui pointe sur la table A

    Maintenant, j'aimerais savoir comment récupérer le login de l'expéditeur et du destinataire avec l'ID du message.

    J'avais bricolé quelque chose mais je récupère seulement une valeur sur 2.

    Le but de cette démarche est de tout récupérer en une fois, sans devoir refaire une requête derrière.

    Merci de votre aide.

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Il faut faire une jointure entre B, A et A. Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A1.login as login_expediteur, A2.login as login_destinataire 
    FROM (B
      INNER JOIN A A1 ON B.id_expediteur = A1.id)
      INNER JOIN A A2 ON B.id_destinataire = A2.id
        WHERE B.id=[id_message]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par Maximilian
    Salut,

    Il faut faire une jointure entre B, A et A. Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A1.login as login_expediteur, A2.login as login_destinataire 
    FROM (B
      INNER JOIN A A1 ON B.id_expediteur = A1.id)
      INNER JOIN A A2 ON B.id_destinataire = A2.id
        WHERE B.id=[id_message]
    Ah oui, effectivement, j'avais oublié !!! Ca me rappelle le SQL89.

    Merci beaucoup.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut Ce n'est toujours pas ça.
    Je vais rentrer plus dans le détail que ce que j'avais énoncé plus haut parce que le problème est un peu plus compliqué en fait.
    Je vais du reste employer les vrais noms de mes tables et champs pour s'y retrouver plus facilement.

    Le contexte:
    Chaque utilisateur peut envoyer des fichiers.
    Chaque utilisateur peut poster un commentaire sur chaque fichier.

    Les tables, elles sont au nombre de 3:

    - UTI_UTILISATEURS
    UTI_ID <pk>
    UTI_LOGIN varchar <pk>
    UTI_PASSWORD
    UTI_STATUS

    - UPF_UPLOADFICHIER
    UPF_ID <pk>
    UPF_UTIID <fk> -> pointe vers UTI_ID de la table UTI_UTILISATEURS, c'est l'ID du propriétaire du fichier
    UPF_FILENAME
    UPF_DATE
    UPF_STATUS

    - COM_COMMENTAIRES
    COM_ID <pk>
    COM_UPFID <fk> -> pointe vers UPF_ID de la table UPF_UPLOADFICHIER
    COM_UTIID <fk> -> pointe vers UTI_ID de la table UTI_UTILISATEURS
    COM_CONTENT
    COM_DATE
    COM_STATUS


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT UTI_LOGIN, UPF_UTIID, UPF_FILENAME, COM_DATE
    FROM COM_COMMENTAIRES
    JOIN UTI_UTILISATEURS ON COM_UTIID = UTI_ID
    JOIN UPF_UPLOADFICHIER ON COM_UPFID = UPF_ID
    WHERE COM_STATUS=1
    ORDER BY COM_DATE DESC
    LIMIT 0, 10;
    Cette requête doit me retourner les 10 derniers commentaires avec comme informations:
    Le login du posteur
    Le login du propriétaire du fichier
    Le nom du fichier
    La date à laquelle le fichier a été envoyé.

    Sauf que dans l'état actuel, je récupère:
    Le login du posteur
    L'ID du propriétaire du fichier
    Le nom du fichier
    La date à laquelle le fichier a été envoyé.

    Je n'arrive pas à faire une nouvelle jointure en UPF_UPLOADFICHIER et UTI_UTILISATEURS.

    Voilà, j'espère avoir été assez clair. Si vous avez besoin de plus de renseignements, je tâcherai d'être plus complet.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    up !

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT u1.UTI_LOGIN AS posteur, u2.UTI_LOGIN AS proprietaire, UPF_FILENAME, COM_DATE
    FROM COM_COMMENTAIRES
    JOIN UTI_UTILISATEURS u1 ON COM_UTIID = u1.UTI_ID
    JOIN UPF_UPLOADFICHIER ON COM_UPFID = UPF_ID
    JOIN UTI_UTILISATEURS u2 ON UPF_UTIID = u2.UTI_ID
    WHERE COM_STATUS=1
    ORDER BY COM_DATE DESC
    LIMIT 0, 10;
    non ? (j'ai pu me planter, on est dimanche soir tard )

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Salut.

    Je viens de tester la requête et elle fonctionne. J'avais testé de faire comme tu as fait mais cela ne fonctionnait pas.

    Bref, merci beaucoup. Je marque ce post en résolu bien que je testerai vraiment la requête demain avec le code. Mais je ne me fais pas de soucis, ca ira.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Testé et approuvé.

    Merci.

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

Discussions similaires

  1. Plusieurs valeurs dans un même champ
    Par fidecourt dans le forum Outils
    Réponses: 2
    Dernier message: 30/01/2013, 00h03
  2. [AC-2007] Relation pls-à-pls entre valeurs d'un même champ d'une même table
    Par Capucapu dans le forum Access
    Réponses: 1
    Dernier message: 06/01/2012, 12h25
  3. Réponses: 6
    Dernier message: 08/04/2008, 13h17
  4. [MySQL] insérer plusieurs valeurs pour le même champ
    Par fAdoua123 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/03/2008, 13h41
  5. Plusieurs valeurs pour un même champ
    Par will89 dans le forum Requêtes
    Réponses: 32
    Dernier message: 14/06/2006, 10h06

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