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 :

Problème de requêtes sur deux tables


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster bénévole et amateur
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster bénévole et amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Problème de requêtes sur deux tables
    Bonjour,

    J'essaye de développer une petite gestion des membres d'un club sportif !

    J'ai deux tables :

    1) Membres (contenant toutes les informations relative aux membres, dont un champ id_Mem

    2) Saisons (qui contient deux champs id_Mem et id_an (correspondant à un numéro d'année)), cette table peut contenir plusieurs fois le même id_Mem, mais ne devrait contenir qu'une seule paire id_Mem <-> id_an identique.

    Je n'arrive pas à écrire la requête qui me permet d'afficher tous les membres contenu dans la table Membres, mais qui ne sont pas encore dans la table saison pour l'année en cours.

    J'ai essayé les deux requêtes suivantes :

    a)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "SELECT M.id_Mem, M.Nom, M.Prenom, M.DateNaiss, 
    					S.id_Mem, S.id_An  
    			FROM ".$base."Membres M, ".$base."Saisons S 
    				WHERE S.id_an <> ".$_SESSION['id_an']." 
    					AND S.id_Mem = M.id_Mem
    				GROUP BY M.id_Mem
    				ORDER BY M.Nom ASC";
    b)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = "SELECT id_Mem, Nom, Prenom, DateNaiss 
    			FROM ".$base."Membres
    			WHERE id_Mem <> ANY (SELECT id_Mem 
    				FROM ".$base."Saisons 
                                    WHERE id_An = ".$_SESSION['id_an'].")
    			ORDER BY Nom ASC, Prenom ASC";
    Mais les deux requêtes m'affichent tout le temps l'ensemble des membres contenus dans la tables membres et surtout il est possible d'enregistrer deux fois la même paire id_Mem <-> id_an

    Je vous remercie d'avance de vos lumières pour l'assistance à un webmaster amateur et bénévole.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 059
    Points
    34 059
    Billets dans le blog
    14
    Par défaut
    la requête qui me permet d'afficher tous les membres contenu dans la table Membres, mais qui ne sont pas encore dans la table saison pour l'année en cours.
    Il faut utiliser NOT EXISTS ou faire une jointure externe et restreindre à ceux dont les colonnes issues de la table Saisons sont à NULL.

    Code : 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
    -- Avec NOT EXISTS
    SELECT M.id_Mem, M.Nom, M.Prenom, M.DateNaiss
    FROM Membres M
    WHERE NOT EXISTS
    (
    	SELECT *
    	FROM Saisons S
    	WHERE S.id_Mem = M.id_Mem
    		AND S.id_An = -- id année souhaitée
    )
    ORDER BY M.Nom, M.Prenom;
     
    -- Avec jointure externe
    SELECT M.id_Mem, M.Nom, M.Prenom, M.DateNaiss
    FROM Membres M
    LEFT OUTER JOIN Saisons S 
    	ON S.id_Mem = M.id_Mem
    	AND S.id_An = -- id année souhaitée
    WHERE S.id_Mem IS NULL
    ORDER BY M.Nom, M.Prenom

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster bénévole et amateur
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster bénévole et amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    C'est parfait merci beaucoup

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

Discussions similaires

  1. [Access] Fonction TOP dans une requête sur deux tables
    Par pc75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/07/2007, 09h31
  2. Requête sur deux tables et réponses en colonnes
    Par grandoc dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/12/2006, 12h49
  3. suite au problème de requête sur plusieur table
    Par michelGProuq dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/07/2006, 16h19
  4. Requête sur deux tables en même temps
    Par will89 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/04/2006, 11h01
  5. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06

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