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 :

Probleme d'imbrication multiple


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Points : 60
    Points
    60
    Par défaut Probleme d'imbrication multiple
    Bonjour,

    Voila je bloque sur une requete mySQL qui me parait pourtant simple :

    J'ai une table "personnes" avec un id et un nom pour chaque personne.
    J'ai une table "meetings" avec une liste de meetings comportant un id, la date de debut et la date de fin du meeting (les meetings ne peuvent pas se chevaucher)
    Enfin j'ai une table "inscriptions" comportant l'id du meeting et l'id de la personne quand une personne s'inscrit a un meeting.

    Je cherche à faire une requete selectionnant toutes les personnes et affichant si une personne est actuellement en meeting ?

    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT p.nom, m.nom
    FROM personnes p
    LEFT JOIN inscriptions i ON i.personne_id = p.personne_id
    LEFT JOIN meetings m ON m.meeting_id = i.meeting_id AND NOW() BETWEEN m.debut AND m.fin
    Le problème c'est que cela joint toutes les inscriptions de chaque personne quelque soit la date et eventuellement le nom du meeting actuel.
    J'ai donc plusieurs lignes pour une seule personne.

    Si quelqu'un a une idée, merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    La dernière condition de jointure n'est pas bonne (ça fait comme un produit cartésien):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.nom, m.nom, IFNULL(m.meeting_id, "pas inscrite") AS id_meeting
    FROM personnes p
    LEFT JOIN inscriptions i ON i.personne_id = p.personne_id
    LEFT JOIN meetings m ON m.meeting_id = i.meeting_id 
     
    WHERE NOW() BETWEEN m.debut AND m.fin
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Points : 60
    Points
    60
    Par défaut
    Salut pcaboche et merci,

    mais j'ai encore un petit socuis avec cette requête, elle ne me renvoi que les personnes inscrites au meeting qui se déroule en ce moment, alors que je souhaiterais récupérer la liste de totues les personnes mais celles non-inscrites au meeting du moment.

    Et je sèche encore ...

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Points : 60
    Points
    60
    Par défaut
    J'ai trouvé une solution, tu peux toujours me dire ce que tu en penses, en tout cas ça me sort le résultat attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT p.nom, m.nom, IF(m.meeting_id > 0, m.nom , "pas inscrite") AS id_meeting 
    FROM personnes p 
    LEFT JOIN meetings m ON NOW() BETWEEN m.debut AND m.fin
    LEFT JOIN inscriptions i ON i.personne_id = p.personne_id AND m.meeting_id = i.meeting_id

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Je n'avais pas vu que tu ne voulais QUE les personnes non inscrites à un meeting (c'est pour cela que j'avais rajouté le dernier champs).


    Ta dernière jointure ressemble à un produit cartésien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT p.nom, m.nom
     
    FROM personnes p, meetings m 
    LEFT JOIN inscriptions i 
    ON i.personne_id = p.personne_id AND m.meeting_id = i.meeting_id
     
    WHERE NOW() BETWEEN m.debut AND m.fin
    AND i.personne_id IS NULL
    Ici on fait les combinaisons possibles entre les personnes et les meeting qui ont lieu en ce moment (produit cartésien) et on teste la non-existance d'inscriptions crorespondantes (LEFT JOIN ... WHERE x IS NULL). Je crois que c'est la manière standard de faire.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 99
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Merci pour ta réponse, en fait j'avais besoin des toutes les personnes et en plus une colonne indiquant si elles sont actuellement en meeting.

    Mais requête du dessus fonctionne j'ai pris celle la

    Merci encore

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

Discussions similaires

  1. probleme avec select multiple
    Par koukoya dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/10/2006, 14h10
  2. probleme d'inclusions multiple
    Par porco dans le forum C++
    Réponses: 4
    Dernier message: 10/10/2006, 11h08
  3. Probleme de copie multiple
    Par blondelle dans le forum C++Builder
    Réponses: 12
    Dernier message: 11/09/2006, 17h50
  4. probleme de définition multiple
    Par gdpasmini dans le forum C
    Réponses: 40
    Dernier message: 05/07/2006, 14h57
  5. [DTD] imbrication multiple d'éléments
    Par tut dans le forum Valider
    Réponses: 1
    Dernier message: 16/09/2005, 18h40

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