[Résolu] Du mal avec une requête sur tables à relation réfléchie

Du mal avec une requête sur tables à relation réfléchie [Résolu] - SQL/NoSQL - Programmation

Marsh Posté le 23-04-2008 à 18:09:04    

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 ?  :hello:


Message édité par ZeBix le 24-04-2008 à 09:21:50
Reply

Marsh Posté le 23-04-2008 à 18:09:04   

Reply

Marsh Posté le 23-04-2008 à 18:19:11    

Rha le Union, il m'a complètement échappé celui là ...  
 
Tant de blabla pour un truc qui me paraissait aussi difficile à expliquer alors que c'est d'une simplicité enfantine ...  
 
Cependant il reste un problème : le UNION n'aime pas, pour le deuxième select, le custom name donné dans le premier ... Ceci dit je peux me débrouiller là avec des variables en php, pas de soucis ..
 
Merci beaucoup NazzTazz !

Reply

Marsh Posté le 24-04-2008 à 09:21:31    

Voilà, c'est parfait comme ça :)
 
merci encore !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed