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 :

Requêtes et jointures


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut Requêtes et jointures
    Bonjour !

    J'ai un souci certainement facile à résoudre ;-)

    Voilà ma table users:

    et ma table comments

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    user_id | user_chamb | comments
    Le champs user_id et user_chamb sont les id de la table users

    J'aimerais faire un SELECT pour obtenir les noms correspondant des users comme ceci

    NAME[user_id] | NAME_CHAMB[user_chamb] | comments

    J'espère avoir été clair...

    Merci d'avance ;-)

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    Utilisez une jointure par colonne distinct :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Merci de ton aide mais ça fait 2 heures que je cherche et rien ne va !

    Je ne suis pas un expert !
    Si tu peux me précisier la jointure à réaliser (paragraphe du tuto)

    Merci de ton aide !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Vraiment personne ne peut me filer un coup de main ?

    Pour les confimés en SQL ça ne devrait pas être si compliqué !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Je vais essayer d'être plus expressif:

    J’ai en fait 2 tables :

    - USERS : id | username | … | …
    - COMMENTS : user_id | chamb_id | comments (user_id a envoyé un commentaire à chamb_id)

    Je voudrais faire un SELECT qui me permette d’obtenir les noms de chaque user en plus des id:

    User_id | NAME[user_id] | chamb_id | NAME[chamb_id] | comments
    1 | Michel |5 | Denis |qsdfsdf
    5 | Denis |1 | Michel |sdfsdfsdfs
    9 | Eric |5 | Denis |fsdfsdfsdf
    1 | Michel |9 | Eric |sdfsdfsdfsdfsd


    NAME[user_id] & NAME[chamb_id] sont bien entendu récupérés de la table users (username).

    Il faut faire une jointure sur 2 colonnes distinct, mais je m’en sors pas du tout !

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Vous pouvez faire deux jointures sur la table user :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT
         C.user_id
        ,U.username as userName
        ,C.chamb_id
        ,Chamb.username as ChambName
        ,C.comments
    FROM comments C
    INNER JOIN User U
        ON U.id = C.user_id
    INNER JOIN User chamb
        ON Chamb.id = C.chamb_id

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Merci !!!!
    Après quelques ajustements ça fonctionne !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT C.user_id ,U.username AS userName ,chamb.username AS ChambName ,C.chamb_id ,C.comment
    FROM comments C
    JOIN users U
        ON U.id = C.user_id
    JOIN users chamb
        ON chamb.id = C.chamb_id
    Mais voilà que ça se complique !

    Quand le chamb_id = 0 (le commentaire s'adresse à tout le monde), il faudrait que les enregistrements apparaissent aussi or étant donné que le user 0 n'est pas dans la table users (normal) les enregistrements ne s'affichent pas.

    Comment faire quand chamb_id = 0 que la requête les fassent apparaître ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Avec une jointure externe, vous vous en sortiriez mieux si vous aviez passé 2h à lire le tuto et essayer les différents type de jointure pour les comprendre.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Salut !
    Ce n'est pas dans mes habitudes de demander la solution toute faite !
    Si j'ai demandé de l'aide c'est que je n'y arrive pas !

    Mais à force de persévérance:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT C.user_id ,U.username AS userName ,chamb.username AS ChambName ,C.chamb_id ,C.comment
    FROM comments C
    LEFT OUTER JOIN users U
        ON U.id = C.user_id
    LEFT OUTER JOIN users chamb
    ON chamb.id = C.chamb_id
    Merci à ceux qui m'ont aidé !

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    il me semble que vous pouvez a priori laisser une jointure interne pour la première jointure. Je suppose en effet que la colonne user_id de la table comments correspond forcément à un utilisateur...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    C'est exact !!!

    Merci encore de ton aide !!!!

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

Discussions similaires

  1. Requête avec jointures
    Par Corben dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 12h55
  2. Réponses: 6
    Dernier message: 20/09/2004, 15h26
  3. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

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