Bonjour à tous,
j'ai un peu du mal à me faire ma petite requête SQL
J'ai deux tables :
Table USERS :
Fields : id, displayname, isgroup
Table USERS2USERS :
Fields : id, ingroup
La relation est réfléchie entre les deux, USERS2USERS est une table croisée entre deux instances de USERS. En gros, un groupe n'est rien d'autre qu'un utilisateur comme un autre, et la table croisée reprend , dans le champ "ingroup", un id de la table users pour déterminer que l'user repris dans le champ id (de users2users, donc) fait partie du groupe.
(et, dans la table USERS, le champ "isgroup" sert à déterminer qui est un groupe ou pas, histoire qu'un utilisateur ne soit pas "membre" d'un autre utilisateur non groupe )
Exemple : user "toto" fait partie du groupe "admin" et user "linus" fait partie des groupes "admin" et "editors"
On a donc :
USERS : (id, displayname, isgroup)
1, admin, 1
2, editors, 1
3, Toto, 0
4, Linus, 0
USERS2USERS : (id, ingroup)
3, 1
4, 1
4, 2
Un utilisateur peut bien sûr ne faire partie d'aucun groupe.
Voilà je voudrais, pour un utilisateur donné, lister d'abord lui même et ensuite tous les groupes auxquels il appartient éventuellement. Cette requête doit se présenter en une seule colonne, mais en autant de "rows" que nécessaire.
Exemple ici, pour l'utilisateur "Linus" :
4
1
2
J'ai essayé avec un left outer join entre les deux tables, je pense que c'est le début (puisque un utilisateur peut n'avoir aucun groupe), mais je n'arrive jamais, en spécifiant un where id = 'x', à obtenir plusieurs rows, ce qui est normal ...
Je n'ai rien contre les requêtes imbriquées et autres subtilité, tout ce que je voudrais c'est une requête qui me donne ce résultat d'un coup d'un seul...
Une petite piste ?
Message édité par ZeBix le 24-04-2008 à 09:21:50