8820 sujets

Développement web côté serveur, CMS

Bonjour à tous
J'ai une connaissance très limitée du SQL, c'est pourquoi j'aimerais de l'aide sur le problème suivant:
- J'ai une table Members qui référence les membres de l'association, dont l'identifieur unique est mbID
- J'ai une table Groups qui référence les différents groupes qui existent au sein de l'association, dont l'identifieur unique est groupID
- J'ai une table MemberGroups qui liste les couples mbID/groupID, ce qui permet de retrouver tous les membres qui appartiennent à un groupe

Ma question:
quel est le moyen le plus simple d'avoir la liste des membres qui appartiennent à la fois à group1 et group2 ?
Pour l'instant j'ai écrit

SELECT mb.firstName, mb.lastName
FROM Members AS mb
WHERE mb.mbID IN (
    SELECT mbg.mbID
    FROM MemberGroups AS mbg
    WHERE mbg.groupID = 'group1'
)
AND mb.mbID IN (
    SELECT mbg1.mbID
    FROM MemberGroups AS mbg1
    WHERE mbg1.groupID = 'group2'
)

J'obtiens bien le résultat souhaité, mais j'ai le sentiment qu'il doit y avoir une façon plus simple d'obtenir ce résultat, d'autant que j'ai parfois besoin d'obtenir la liste des membres qui appartiennent à 3 groupes, ce qui fait un code très lourd.
Merci pour vos conseils.
Modifié par PapyJP (12 Mar 2026 - 14:23)
Bonjour,

SELECT mb.firstName, mb.lastName
FROM Members  mb
LEFT JOIN MemberGroups mbg ON  mbg.groupID = mb.mbID
WHERE mbg.groupID = 'group1' AND mbg1.groupID = 'group2'


Quelque chose comme ça devrait répondre au problème
Modérateur
Salut,

Je passe en coup de vent. Je verrai un truc comme ça :

upload/1773335374-11496-membersgroup.png

SQL (fait de tête et je peux m'être trompé) :

SELECT 
    m.firstname, 
    m.lastname
FROM 
    members m
JOIN 
    groups_members gm 
ON 
    m.id = gm.members_id
WHERE 
    gm.groups_id IN (ID_GROUP1, ID_GROUP2)
GROUP BY 
    m.id, m.firstname, m.lastname
HAVING 
    COUNT(DISTINCT gm.groups_id) = 2
Meilleure solution
Cela marche parfaitement.
C’est le genre de choses que je vais essayer d’assimiler pour utilisation dans d’autres cas.
Modifié par PapyJP (13 Mar 2026 - 12:56)