{MySQL} select sur 2 tables >

Fermé
audreyodd - 18 janv. 2010 à 17:24
 audreyodd - 19 janv. 2010 à 09:24
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 ...
A voir également:

3 réponses

Pardon, j'ai lu un peu en diagonale

tu pourrais faire
SELECT *
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
2
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
1
remplace ton >= par =
0
meme avec le simple = il y aura aussi l'adhérent C qui sortira à la requete pour lannee 2009 parce qu'il a une ligne de la table COTISATION qui répond à la requete...tu vois?
0