{MySQL} select sur 2 tables >
audreyodd
-
audreyodd -
audreyodd -
Bonjour,
j'ai une requete à faire pour la gestion d'un back office. il y a une table ADHERENT (idADHERENT,nom,prenom...) et une table COTISATION (id,idADHERENT,annee,mode_paiement,paiement_effectue...) qui regroupe toutes les cotisations d'un adhérent. (une cotisation étant le paiement de l'abonnement au site pour un an) .
une page de recherche permet d'effectuer des recherches sur ces tables et notamment de faire ressortir :
--> la dernière année de cotisation des adhérents pour l'année : xxxx (année à renseigner lors de la recherche)
Adhérent A : cotisations 2007,2008,2009
Adhérent B : cotisations 2008,2009
Adhérent C : cotisations 2009,2010
si je veux les adhérent dont la dernière année de cotisation est 2009 avec la requete :
SELECT * FROM ADHERENT,COTISATIONS WHERE COTISATIONS.idADHERENT = ADHERENT.idADHERENT AND COTISATIONS.annee >= 2009
ca me sort : l'adhérent A,B, etttttt C or la est mon problème : le C ne doit pas apparaitre pour la requete de l'année 2009 mais pour une recherche sur l'année2010 car il s'agit de la dernière année de cotisation de l'adhéren C...
Merci pour vos suggestions ...
j'ai une requete à faire pour la gestion d'un back office. il y a une table ADHERENT (idADHERENT,nom,prenom...) et une table COTISATION (id,idADHERENT,annee,mode_paiement,paiement_effectue...) qui regroupe toutes les cotisations d'un adhérent. (une cotisation étant le paiement de l'abonnement au site pour un an) .
une page de recherche permet d'effectuer des recherches sur ces tables et notamment de faire ressortir :
--> la dernière année de cotisation des adhérents pour l'année : xxxx (année à renseigner lors de la recherche)
Adhérent A : cotisations 2007,2008,2009
Adhérent B : cotisations 2008,2009
Adhérent C : cotisations 2009,2010
si je veux les adhérent dont la dernière année de cotisation est 2009 avec la requete :
SELECT * FROM ADHERENT,COTISATIONS WHERE COTISATIONS.idADHERENT = ADHERENT.idADHERENT AND COTISATIONS.annee >= 2009
ca me sort : l'adhérent A,B, etttttt C or la est mon problème : le C ne doit pas apparaitre pour la requete de l'année 2009 mais pour une recherche sur l'année2010 car il s'agit de la dernière année de cotisation de l'adhéren C...
Merci pour vos suggestions ...
3 réponses
-
Pardon, j'ai lu un peu en diagonale
tu pourrais faireSELECT * FROM ADHERENT,COTISATIONS WHERE COTISATIONS.idADHERENT = ADHERENT.idADHERENT AND (COTISATIONS.idADHERENT, COTISATIONS.annee) in ( SELECT idADHERENT, max(annee) FROM COTISATIONS GROUP BY idADHERENT HAVING MAX(annee)=2009 )
qu'il faut comprendre comme
A. le SELECT idADHERENT, max(annee) FROM COTISATIONS GROUP BY idADHERENT HAVING MAX(annee)=2009 est l'extraction des dernières années de cotisation par nom, dont on ne conserve que les lignes où max(annee) = 2009
B. cette grille de données calculée en A sert de guide pour filtrer les lignes de ADHERENT x COTISATION -
c'est parfait, merciiiiii, j'aurais jamais pensé à utiliser un IN mais plutot de faire un select imbriqué, et puis je n'aurais également pas pensé à faire un having comme ca....manque d'expérience j'imagine! merci
-