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 :

Relation de 2 champs d'une table vers 1 champ d'une seconde


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut Relation de 2 champs d'une table vers 1 champ d'une seconde
    Salut à tous,

    Ci-dessous 2 tables :

    table membre
    membre_id - pseudo

    table sujet
    sujet_id - auteur_id - dernier_posteur_id

    Je cherche à sélectionner dans une requête, le pseudo correspondant à auteur_id, et le pseudo correspondant à dernier_posteur_id.

    Suis-je obligé de faire 2 fois une jointure sur la table membre ?

  2. #2
    Membre confirmé Avatar de toomsounet
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 481
    Points : 576
    Points
    576
    Par défaut
    Nan tu utilise la jointure entre l'id du membre et l'id de l'auteur du sujet. Et ensuite tu fais ta requete pour rechercher (clause where) l'id du membre qui correspond a l'id du dernier posteur.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    j'ai pas bien compris, tu peux me donner un exemple ?

    Car si je fais ce que tu dis, comment je fais pour différencier les pseudos ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT pseudo AS auteur, pseudo AS dernier_posteur 
    FROM membre 
    LEFT JOIN sujet 
    ON auteur_id=membre_id 
    WHERE dernier_posteur_id=membre_id;

    C'est ça ?

    Je ne peux pas tester car je n'ai pas encore défini mes tables finales.

    Merci.

  4. #4
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Pas tout à fait, ce sera plutôt (sinon on n'aura de résultat que si le dernier posteur est l'auteur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT m1.pseudo AS auteur, m2.pseudo AS dernier_posteur 
    FROM sujet 
    [LEFT] JOIN membre m1 ON auteur_id=m1.membre_id 
    [LEFT] JOIN membre m2 ON dernier_posteur_id=m2.membre_id
    Le 'left' n'est à mettre que s'il peut n'y avoir aucun élément correspondant dans la table membre. Comme il ralentie la requête autant s'en passer si possible. Et le 'WHERE' pourra toujours servir à choisir le sujet.

    Donc il faut bien deux jointures, même si on peut les mettre dans la même requête. Pour faire une seule jointure il faudrait joindre sur (auteur_id=membre_id OR dernier_posteur_id=membre_id), ce qui donnerait deux résultats, mais obligerait le code client à déméler auteur et dernier posteur (plutôt bof à mon avis).

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    C'est donc bien ce que je pensais au départ, on est contraint d'utiliser 2 jointures sur la même table.

    Donc, je ne peux pas faire ceci, ça me semble trop lourd(ma requête opère déjà sur trois tables), je vais donc ajouter un champ dans ma table pour y stocker le pseudo de l'auteur de la dernière réponse d'un sujet.

    Oui, c'est vrai pour le LEFT JOIN, en plus je le sait, mais c'est une mauvaise habitude que j'ai prise que de mettre LEFT JOIN partout sans réfléchir si c'est vraiment nécessaire...

    Merci de ta réponse

  6. #6
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Sinon un JOIN pas LEFT sur une clef primaire c'est assez fulgurant. Faut vraiment en avoir un paquet pour que ce soit un pb. Enfin c'est vrai que mettre le pseudo c'est pas trop la mer à boire.

    De rien

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

Discussions similaires

  1. [WD17] Drag and Drop depuis une table vers un champ de saisie
    Par Dramon dans le forum WinDev
    Réponses: 0
    Dernier message: 24/02/2015, 16h36
  2. MAJ Champs d'une table selon sa valeur et une table de correspondance
    Par eduardo9231 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/06/2012, 10h53
  3. Réponses: 2
    Dernier message: 31/03/2011, 11h22
  4. Réponses: 2
    Dernier message: 17/01/2010, 18h09
  5. Réponses: 4
    Dernier message: 21/02/2008, 04h01

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