8816 sujets

Développement web côté serveur, CMS

Bonjour à tous
J'ai une table Members qui contient les membres de l'association avec un identifieur unique mbID
J'ai par ailleurs une table Groups qui désigne les groupes de membres avec un identifieur unique groupID
Comme un membre peut appartenir à plusieurs groupes, j'ai une table MemberGroups dont les lignes comportent les couples mbID, groupID
Si j'écris le requête suivante

SELECT mb.mbID,
     GROUP_CONCAT(mbg.groupID ORDER BY mbg.groupID SEPARATOR ';')
FROM Members AS mb
LEFT JOIN MemberGroups AS mbg
     ON mbg.mbID = mb.mbID
WHERE mb.mbID = 'xxx'

J'obtiens bien l'identifieur xxx et une chaîne de caractères contenant tous les groupes auxquels appartient le membre correspondant.

Je veux obtenir la liste de tous les membres avec leurs groupes d'appartenance.

Je constate que si je supprime la ligne WHERE mb.mbID = 'xxx' je n'obtiens pas la liste désirée, mais une seule ligne qui comprend le premier membre de la liste et la liste concaténée de tous les groupes qui existent dans la table.

Je pense comprendre pourquoi ça me donne ce résultat, mais je ne trouve pas le moyen d'obtenir la liste que je désire.

Auriez vous une idée de la façon de faire ?
Merci pour votre aide
Merci de la réponse, mais où mettre le GROUP BY
J'ai essayé

SELECT mb.mbID,
     GROUP_CONCAT(mbg.groupID GROUP BY mbg.mbID ORDER BY mbg.groupID SEPARATOR ';')
FROM Members AS mb
LEFT JOIN MemberGroups AS mbg
     ON mbg.mbID = mb.mbID

ça produit une erreur

#1064 - Erreur de syntaxe près de 'GROUP BY mbg.mbID ORDER BY mbg.groupID SEPARATOR ';')
FROM Members AS mb
LEFT ' à la ligne 2
Je pensais à ça
SELECT mb.mbID, GROUP_CONCAT(mbg.groupID ORDER BY mbg.groupIDSEPARATOR ';')
FROM Members AS mb
LEFT JOIN MemberGroups AS mbg ON mbg.mbID = mb.mbID
WHERE mb.mbID = 'xxx'
GROUP BY mb.mbID 
Meilleure solution
Merci infiniment
J'ai du mal à comprendre la façon dont ça donne le bon résultat, je vais passer le temps nécessaire à intégrer la logique de cette solution.