Dans le cadre d'une gestion de droits et de permissions sur une application web,
je cherche à afficher une liste d'utilisateurs membres ou non membres d'un groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste de tous les
utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon s'ils sont membres
ou pas du groupe sélectionné:
memberships_mbr
-------------------------------
FK mbr_group_ref
FK mbr_user_ref
-------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le groupe associé.
- si le groupe est null (donc l'utilisateur n'est membre d'aucun groupe), la valeur 'null' est remplacée par 0
pour mes tests
- je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant:
----------------------------------------------------------
SELECT usr_login, ISNULL(grp_id,0) AS grp_id
FROM memberships_mbr
RIGHT OUTER JOIN groups_grp
ON mbr_group_ref = grp_id
RIGHT OUTER JOIN users_usr
ON mbr_user_ref = usr_id
WHERE usr_domain_ref = 4
----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les utilisateurs
membres d'aucun groupe:
----------------------------------------------------------
SELECT usr_login, ISNULL(grp_id,0) AS grp_id
FROM memberships_mbr
RIGHT OUTER JOIN groups_grp
ON mbr_group_ref = grp_id
RIGHT OUTER JOIN users_usr
ON mbr_user_ref = usr_id
WHERE usr_domain_ref = 4
AND grp_id = 5
----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ? = )
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Patrice
grp_id=5 OR grp_id IS NULL ?
(pour avoir le groupe que tu veux mais garder la ligne de l'utilisateur même si il n'est pas membre de ce groupe ?)
Sinon dans la logique s'agissant d'une liste d'utilisateur il est peut-être plus facile de raisonner en partant de la table d'utilisateur et en faisant un outer join sur le groupe 5...
Patrice
--
"Antonio Fontes" a écrit dans le message de news:
Bonjour à tous,
Dans le cadre d'une gestion de droits et de permissions sur une
application web,
je cherche à afficher une liste d'utilisateurs membres ou non membres d'un
groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste
de tous les
utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon
memberships_mbr ------------------------------- FK mbr_group_ref FK mbr_user_ref -------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le
groupe associé.
- si le groupe est null (donc l'utilisateur n'est membre d'aucun
groupe), la valeur 'null' est remplacée par 0
pour mes tests - je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe
spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 ----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les
utilisateurs
membres d'aucun groupe: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 AND grp_id = 5 ----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ?
= )
.antoine
grp_id=5 OR grp_id IS NULL ?
(pour avoir le groupe que tu veux mais garder la ligne de l'utilisateur même
si il n'est pas membre de ce groupe ?)
Sinon dans la logique s'agissant d'une liste d'utilisateur il est peut-être
plus facile de raisonner en partant de la table d'utilisateur et en faisant
un outer join sur le groupe 5...
Patrice
--
"Antonio Fontes" <neNOwsaSPlaAMska@nxPLEASEtg.net> a écrit dans le message
de news:eURSZZNZEHA.3420@TK2MSFTNGP12.phx.gbl...
Bonjour à tous,
Dans le cadre d'une gestion de droits et de permissions sur une
application web,
je cherche à afficher une liste d'utilisateurs membres ou non membres d'un
groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste
de tous les
utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon
memberships_mbr
-------------------------------
FK mbr_group_ref
FK mbr_user_ref
-------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le
groupe associé.
- si le groupe est null (donc l'utilisateur n'est membre d'aucun
groupe), la valeur 'null' est remplacée par 0
pour mes tests
- je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe
spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant:
----------------------------------------------------------
SELECT usr_login, ISNULL(grp_id,0) AS grp_id
FROM memberships_mbr
RIGHT OUTER JOIN groups_grp
ON mbr_group_ref = grp_id
RIGHT OUTER JOIN users_usr
ON mbr_user_ref = usr_id
WHERE usr_domain_ref = 4
----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les
utilisateurs
membres d'aucun groupe:
----------------------------------------------------------
SELECT usr_login, ISNULL(grp_id,0) AS grp_id
FROM memberships_mbr
RIGHT OUTER JOIN groups_grp
ON mbr_group_ref = grp_id
RIGHT OUTER JOIN users_usr
ON mbr_user_ref = usr_id
WHERE usr_domain_ref = 4
AND grp_id = 5
----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ?
(pour avoir le groupe que tu veux mais garder la ligne de l'utilisateur même si il n'est pas membre de ce groupe ?)
Sinon dans la logique s'agissant d'une liste d'utilisateur il est peut-être plus facile de raisonner en partant de la table d'utilisateur et en faisant un outer join sur le groupe 5...
Patrice
--
"Antonio Fontes" a écrit dans le message de news:
Bonjour à tous,
Dans le cadre d'une gestion de droits et de permissions sur une
application web,
je cherche à afficher une liste d'utilisateurs membres ou non membres d'un
groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste
de tous les
utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon
memberships_mbr ------------------------------- FK mbr_group_ref FK mbr_user_ref -------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le
groupe associé.
- si le groupe est null (donc l'utilisateur n'est membre d'aucun
groupe), la valeur 'null' est remplacée par 0
pour mes tests - je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe
spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 ----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les
utilisateurs
membres d'aucun groupe: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 AND grp_id = 5 ----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ?
= )
.antoine
Antonio Fontes
> grp_id=5 OR grp_id IS NULL ?
Non. La clause restrictive ne peut avoir lieu vu que avant la requête il n'y a pas de champs nuls. Ce n'est pas sur le where que cela va marcher .. Par contre, cela m'a fait réaliser que je pouvais effectuer le traitement non pas sur la restriction mais sur le formatage des résultats.
J'ai donc ceci: j'évite de faire la restriction sur la clause WHERE mais j'effectue un traitement sur les résultats retournés. Par contre ce n'est pas 'propre' vu que l'information sur les autres ID de groupes est tout de même 'traitée' à un instant par le serveur:
----tous les utilisateurs membres et non membres du groupe '4', ---------------- ----membres du domaine numéro 5-------------------------------------------- ----avec '0' si l'utilisateur n'est pas membre du groupe--------------------------
SELECT usr_login, grp_id = CASE WHEN grp_id <> 4 THEN 0 WHEN grp_id IS NULL THEN 0 ELSE grp_id END FROM acl_groupmembers_grpmbr RIGHT OUTER JOIN acl_groups_grp ON grpmbr_group_ref = grp_id RIGHT OUTER JOIN dbo.acl_users_usr ON grpmbr_user_ref = usr_id WHERE usr_domaine_ref = 5 ------------------------------------------------------------------------------
Et là j'obtiens bien le jeu de résultats souhaité:
usr_id grp_id --------------------- alain 4 sylvie 4 sophie 0 marc 0 ...
Bref, j'ai une solution mais il ne me semble pas que ce soit la plus propre. Si jamais quelqu'un a mieux (ce n'est plus du tout urgent pour l'instant) je reste ouvert à toute proposition ; )
.antoine
> grp_id=5 OR grp_id IS NULL ?
Non. La clause restrictive ne peut avoir lieu vu que avant la requête
il n'y a pas de champs nuls. Ce n'est pas sur le where que cela va
marcher .. Par contre, cela m'a fait réaliser que je pouvais effectuer le
traitement non pas sur la restriction mais sur le formatage des résultats.
J'ai donc ceci: j'évite de faire la restriction sur la clause
WHERE mais j'effectue un traitement sur les résultats retournés. Par contre
ce n'est pas 'propre' vu que l'information sur les autres ID de groupes est
tout de même 'traitée' à un instant par le serveur:
----tous les utilisateurs membres et non membres du groupe '4', ----------------
----membres du domaine numéro 5--------------------------------------------
----avec '0' si l'utilisateur n'est pas membre du groupe--------------------------
SELECT usr_login, grp_id = CASE WHEN grp_id <> 4 THEN 0 WHEN grp_id IS NULL THEN 0 ELSE grp_id END
FROM acl_groupmembers_grpmbr
RIGHT OUTER JOIN acl_groups_grp
ON grpmbr_group_ref = grp_id
RIGHT OUTER JOIN dbo.acl_users_usr
ON grpmbr_user_ref = usr_id
WHERE usr_domaine_ref = 5
------------------------------------------------------------------------------
Et là j'obtiens bien le jeu de résultats souhaité:
usr_id grp_id
---------------------
alain 4
sylvie 4
sophie 0
marc 0
...
Bref, j'ai une solution mais il ne me semble pas que ce soit la plus propre. Si jamais
quelqu'un a mieux (ce n'est plus du tout urgent pour l'instant) je reste ouvert à toute
proposition ; )
Non. La clause restrictive ne peut avoir lieu vu que avant la requête il n'y a pas de champs nuls. Ce n'est pas sur le where que cela va marcher .. Par contre, cela m'a fait réaliser que je pouvais effectuer le traitement non pas sur la restriction mais sur le formatage des résultats.
J'ai donc ceci: j'évite de faire la restriction sur la clause WHERE mais j'effectue un traitement sur les résultats retournés. Par contre ce n'est pas 'propre' vu que l'information sur les autres ID de groupes est tout de même 'traitée' à un instant par le serveur:
----tous les utilisateurs membres et non membres du groupe '4', ---------------- ----membres du domaine numéro 5-------------------------------------------- ----avec '0' si l'utilisateur n'est pas membre du groupe--------------------------
SELECT usr_login, grp_id = CASE WHEN grp_id <> 4 THEN 0 WHEN grp_id IS NULL THEN 0 ELSE grp_id END FROM acl_groupmembers_grpmbr RIGHT OUTER JOIN acl_groups_grp ON grpmbr_group_ref = grp_id RIGHT OUTER JOIN dbo.acl_users_usr ON grpmbr_user_ref = usr_id WHERE usr_domaine_ref = 5 ------------------------------------------------------------------------------
Et là j'obtiens bien le jeu de résultats souhaité:
usr_id grp_id --------------------- alain 4 sylvie 4 sophie 0 marc 0 ...
Bref, j'ai une solution mais il ne me semble pas que ce soit la plus propre. Si jamais quelqu'un a mieux (ce n'est plus du tout urgent pour l'instant) je reste ouvert à toute proposition ; )
.antoine
Patrice
Le WHERE est fait après la jointure qui te ramène des NULLs si pas de correspondance. Après pour être tout a tout à fait franc, je n'ai peut-être pas compris le point exact qui posait problème dans le message original (j'ai cru comprendre que cela allait bien en faisant la requête sur tous les groupes mais que cela n'allait pas en sélectionnant un groupe précis (il manque des lignes ?))
Si je reprends la logique dans ce cas tu peux pêut-être faire quelque chose comme : - prendre le groupe 5 - joindre avec tous les utilisateurs existants - outer join des membres sur le couple (groupe,utilisateur)
Ce dernier outer join remènera effectivement une donnée si le couple existe (membre) et NULL si le couple n'existe pas (non membre).
Ce qui devrait donner quelque chose comme (sans reprendre tes conventions) :
SELECT *,CASE WHEN Membres.Membre IS NULL THEN 0 ELSE 1 END AS EstMembre FROM Groupes -- Tous les couples (groupe,utilisateur) CROSS JOIN Utilisateurs LEFT JOIN Membres ON Membres.Groupe=Groupes.Groupe AND Utilisateurs.Utilisateur=Utilisateurs.Utilisateurs -- Pour le groupe 5 WHERE Groupe=5
Patrice
--
"Antonio Fontes" a écrit dans le message de news:
> grp_id=5 OR grp_id IS NULL ? Non. La clause restrictive ne peut avoir lieu vu que avant la requête il n'y a pas de champs nuls. Ce n'est pas sur le where que cela va marcher .. Par contre, cela m'a fait réaliser que je pouvais effectuer le traitement non pas sur la restriction mais sur le formatage des résultats.
J'ai donc ceci: j'évite de faire la restriction sur la clause WHERE mais j'effectue un traitement sur les résultats retournés. Par
contre
ce n'est pas 'propre' vu que l'information sur les autres ID de groupes
est
tout de même 'traitée' à un instant par le serveur:
----tous les utilisateurs membres et non membres du groupe
'4', ----------------
----membres du domaine numéro
5--------------------------------------------
----avec '0' si l'utilisateur n'est pas membre du
groupe--------------------------
SELECT usr_login, grp_id = CASE WHEN grp_id <> 4 THEN 0 WHEN grp_id IS
NULL THEN 0 ELSE grp_id END
FROM acl_groupmembers_grpmbr RIGHT OUTER JOIN acl_groups_grp ON grpmbr_group_ref = grp_id RIGHT OUTER JOIN dbo.acl_users_usr ON grpmbr_user_ref = usr_id WHERE usr_domaine_ref = 5 --------------------------------------------------------------------------
----
Et là j'obtiens bien le jeu de résultats souhaité:
usr_id grp_id --------------------- alain 4 sylvie 4 sophie 0 marc 0 ...
Bref, j'ai une solution mais il ne me semble pas que ce soit la plus
propre. Si jamais
quelqu'un a mieux (ce n'est plus du tout urgent pour l'instant) je reste
ouvert à toute
proposition ; )
.antoine
Le WHERE est fait après la jointure qui te ramène des NULLs si pas de
correspondance. Après pour être tout a tout à fait franc, je n'ai peut-être
pas compris le point exact qui posait problème dans le message original
(j'ai cru comprendre que cela allait bien en faisant la requête sur tous les
groupes mais que cela n'allait pas en sélectionnant un groupe précis (il
manque des lignes ?))
Si je reprends la logique dans ce cas tu peux pêut-être faire quelque chose
comme :
- prendre le groupe 5
- joindre avec tous les utilisateurs existants
- outer join des membres sur le couple (groupe,utilisateur)
Ce dernier outer join remènera effectivement une donnée si le couple existe
(membre) et NULL si le couple n'existe pas (non membre).
Ce qui devrait donner quelque chose comme (sans reprendre tes conventions) :
SELECT *,CASE WHEN Membres.Membre IS NULL THEN 0 ELSE 1 END AS EstMembre
FROM Groupes
-- Tous les couples (groupe,utilisateur)
CROSS JOIN Utilisateurs
LEFT JOIN Membres ON Membres.Groupe=Groupes.Groupe AND
Utilisateurs.Utilisateur=Utilisateurs.Utilisateurs
-- Pour le groupe 5
WHERE Groupe=5
Patrice
--
"Antonio Fontes" <neNOwsaSPlaAMska@nxPLEASEtg.net> a écrit dans le message
de news:OyFiaIOZEHA.716@TK2MSFTNGP11.phx.gbl...
> grp_id=5 OR grp_id IS NULL ?
Non. La clause restrictive ne peut avoir lieu vu que avant la requête
il n'y a pas de champs nuls. Ce n'est pas sur le where que cela va
marcher .. Par contre, cela m'a fait réaliser que je pouvais effectuer le
traitement non pas sur la restriction mais sur le formatage des résultats.
J'ai donc ceci: j'évite de faire la restriction sur la clause
WHERE mais j'effectue un traitement sur les résultats retournés. Par
contre
ce n'est pas 'propre' vu que l'information sur les autres ID de groupes
est
tout de même 'traitée' à un instant par le serveur:
----tous les utilisateurs membres et non membres du groupe
'4', ----------------
----membres du domaine numéro
5--------------------------------------------
----avec '0' si l'utilisateur n'est pas membre du
groupe--------------------------
SELECT usr_login, grp_id = CASE WHEN grp_id <> 4 THEN 0 WHEN grp_id IS
NULL THEN 0 ELSE grp_id END
FROM acl_groupmembers_grpmbr
RIGHT OUTER JOIN acl_groups_grp
ON grpmbr_group_ref = grp_id
RIGHT OUTER JOIN dbo.acl_users_usr
ON grpmbr_user_ref = usr_id
WHERE usr_domaine_ref = 5
--------------------------------------------------------------------------
----
Et là j'obtiens bien le jeu de résultats souhaité:
usr_id grp_id
---------------------
alain 4
sylvie 4
sophie 0
marc 0
...
Bref, j'ai une solution mais il ne me semble pas que ce soit la plus
propre. Si jamais
quelqu'un a mieux (ce n'est plus du tout urgent pour l'instant) je reste
Le WHERE est fait après la jointure qui te ramène des NULLs si pas de correspondance. Après pour être tout a tout à fait franc, je n'ai peut-être pas compris le point exact qui posait problème dans le message original (j'ai cru comprendre que cela allait bien en faisant la requête sur tous les groupes mais que cela n'allait pas en sélectionnant un groupe précis (il manque des lignes ?))
Si je reprends la logique dans ce cas tu peux pêut-être faire quelque chose comme : - prendre le groupe 5 - joindre avec tous les utilisateurs existants - outer join des membres sur le couple (groupe,utilisateur)
Ce dernier outer join remènera effectivement une donnée si le couple existe (membre) et NULL si le couple n'existe pas (non membre).
Ce qui devrait donner quelque chose comme (sans reprendre tes conventions) :
SELECT *,CASE WHEN Membres.Membre IS NULL THEN 0 ELSE 1 END AS EstMembre FROM Groupes -- Tous les couples (groupe,utilisateur) CROSS JOIN Utilisateurs LEFT JOIN Membres ON Membres.Groupe=Groupes.Groupe AND Utilisateurs.Utilisateur=Utilisateurs.Utilisateurs -- Pour le groupe 5 WHERE Groupe=5
Patrice
--
"Antonio Fontes" a écrit dans le message de news:
> grp_id=5 OR grp_id IS NULL ? Non. La clause restrictive ne peut avoir lieu vu que avant la requête il n'y a pas de champs nuls. Ce n'est pas sur le where que cela va marcher .. Par contre, cela m'a fait réaliser que je pouvais effectuer le traitement non pas sur la restriction mais sur le formatage des résultats.
J'ai donc ceci: j'évite de faire la restriction sur la clause WHERE mais j'effectue un traitement sur les résultats retournés. Par
contre
ce n'est pas 'propre' vu que l'information sur les autres ID de groupes
est
tout de même 'traitée' à un instant par le serveur:
----tous les utilisateurs membres et non membres du groupe
'4', ----------------
----membres du domaine numéro
5--------------------------------------------
----avec '0' si l'utilisateur n'est pas membre du
groupe--------------------------
SELECT usr_login, grp_id = CASE WHEN grp_id <> 4 THEN 0 WHEN grp_id IS
NULL THEN 0 ELSE grp_id END
FROM acl_groupmembers_grpmbr RIGHT OUTER JOIN acl_groups_grp ON grpmbr_group_ref = grp_id RIGHT OUTER JOIN dbo.acl_users_usr ON grpmbr_user_ref = usr_id WHERE usr_domaine_ref = 5 --------------------------------------------------------------------------
----
Et là j'obtiens bien le jeu de résultats souhaité:
usr_id grp_id --------------------- alain 4 sylvie 4 sophie 0 marc 0 ...
Bref, j'ai une solution mais il ne me semble pas que ce soit la plus
propre. Si jamais
quelqu'un a mieux (ce n'est plus du tout urgent pour l'instant) je reste
ouvert à toute
proposition ; )
.antoine
Fred BROUARD
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id WHERE u.usr_domain_ref = 4 OR u.usr_domain_ref IS NULL
ou encore :
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id AND u.usr_domain_ref = 4
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Antonio Fontes a écrit:
Bonjour à tous,
Dans le cadre d'une gestion de droits et de permissions sur une application web, je cherche à afficher une liste d'utilisateurs membres ou non membres d'un groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste de tous les utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon s'ils sont membres ou pas du groupe sélectionné:
memberships_mbr ------------------------------- FK mbr_group_ref FK mbr_user_ref -------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le groupe associé. - si le groupe est null (donc l'utilisateur n'est membre d'aucun groupe), la valeur 'null' est remplacée par 0 pour mes tests - je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 ----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les utilisateurs membres d'aucun groupe: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 AND grp_id = 5 ----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ? = )
.antoine
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id
FROM memberships_mbr m
LEFT OUTER JOIN groups_grp g
ON m.mbr_group_ref = p.grp_id
LEFT OUTER JOIN users_usr u
ON m.mbr_user_ref = u.usr_id
WHERE u.usr_domain_ref = 4 OR u.usr_domain_ref IS NULL
ou encore :
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id
FROM memberships_mbr m
LEFT OUTER JOIN groups_grp g
ON m.mbr_group_ref = p.grp_id
LEFT OUTER JOIN users_usr u
ON m.mbr_user_ref = u.usr_id AND u.usr_domain_ref = 4
A +
--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Antonio Fontes a écrit:
Bonjour à tous,
Dans le cadre d'une gestion de droits et de permissions sur une application web,
je cherche à afficher une liste d'utilisateurs membres ou non membres d'un groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste de tous les
utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon s'ils sont membres
ou pas du groupe sélectionné:
memberships_mbr
-------------------------------
FK mbr_group_ref
FK mbr_user_ref
-------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le groupe associé.
- si le groupe est null (donc l'utilisateur n'est membre d'aucun groupe), la valeur 'null' est remplacée par 0
pour mes tests
- je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant:
----------------------------------------------------------
SELECT usr_login, ISNULL(grp_id,0) AS grp_id
FROM memberships_mbr
RIGHT OUTER JOIN groups_grp
ON mbr_group_ref = grp_id
RIGHT OUTER JOIN users_usr
ON mbr_user_ref = usr_id
WHERE usr_domain_ref = 4
----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les utilisateurs
membres d'aucun groupe:
----------------------------------------------------------
SELECT usr_login, ISNULL(grp_id,0) AS grp_id
FROM memberships_mbr
RIGHT OUTER JOIN groups_grp
ON mbr_group_ref = grp_id
RIGHT OUTER JOIN users_usr
ON mbr_user_ref = usr_id
WHERE usr_domain_ref = 4
AND grp_id = 5
----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ? = )
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id WHERE u.usr_domain_ref = 4 OR u.usr_domain_ref IS NULL
ou encore :
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id AND u.usr_domain_ref = 4
A +
-- Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com ************************ www.datasapiens.com *************************
Antonio Fontes a écrit:
Bonjour à tous,
Dans le cadre d'une gestion de droits et de permissions sur une application web, je cherche à afficher une liste d'utilisateurs membres ou non membres d'un groupe.
L'objectif étant de pouvoir sélectionner un groupe, puis d'avoir une liste de tous les utilisateurs d'un 'domaine virtuel' , avec une case cochée ou non selon s'ils sont membres ou pas du groupe sélectionné:
memberships_mbr ------------------------------- FK mbr_group_ref FK mbr_user_ref -------------------------------
Actuellement voici ce que j'arrive à faire:
- obtenir un jeu d'enregistrements avec tous les utilsateurs, et le groupe associé. - si le groupe est null (donc l'utilisateur n'est membre d'aucun groupe), la valeur 'null' est remplacée par 0 pour mes tests - je peux spécifier le 'domaine' de l'utilisateur.
Et voici ce que je cherche à faire en plus:
- obtenir les mêmes résultats mais uniquement pour UN groupe spécifique.
Et voici ce qui insouhaitable:
- les utilisateurs membres d'aucun domaine ne sont plus affichés.
La requête avant: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 ----------------------------------------------------------
La requête avec la nouvelle clause, mais qui me fait disparaître les utilisateurs membres d'aucun groupe: ---------------------------------------------------------- SELECT usr_login, ISNULL(grp_id,0) AS grp_id FROM memberships_mbr RIGHT OUTER JOIN groups_grp ON mbr_group_ref = grp_id RIGHT OUTER JOIN users_usr ON mbr_user_ref = usr_id WHERE usr_domain_ref = 4 AND grp_id = 5 ----------------------------------------------------------
Quelqu'un aurait-il une idée sur le petit détail sur lequel je me trompe ? = )
.antoine
Antoine F.
Ok merci, je vais regarder cela dès que je peux, mais pas de réponse dans la journée sûrement vu ce que l'on vient de me demander de faire = )
,antoine
"Fred BROUARD" wrote in message news:
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id WHERE u.usr_domain_ref = 4 OR u.usr_domain_ref IS NULL
ou encore :
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id AND u.usr_domain_ref = 4
A +
Ok merci, je vais regarder cela dès que je peux, mais pas de réponse dans
la journée sûrement vu ce que l'on vient de me demander de faire = )
,antoine
"Fred BROUARD" <brouardf@club-internet.fr> wrote in message news:410D331C.2050606@club-internet.fr...
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id
FROM memberships_mbr m
LEFT OUTER JOIN groups_grp g
ON m.mbr_group_ref = p.grp_id
LEFT OUTER JOIN users_usr u
ON m.mbr_user_ref = u.usr_id
WHERE u.usr_domain_ref = 4 OR u.usr_domain_ref IS NULL
ou encore :
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id
FROM memberships_mbr m
LEFT OUTER JOIN groups_grp g
ON m.mbr_group_ref = p.grp_id
LEFT OUTER JOIN users_usr u
ON m.mbr_user_ref = u.usr_id AND u.usr_domain_ref = 4
Ok merci, je vais regarder cela dès que je peux, mais pas de réponse dans la journée sûrement vu ce que l'on vient de me demander de faire = )
,antoine
"Fred BROUARD" wrote in message news:
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id WHERE u.usr_domain_ref = 4 OR u.usr_domain_ref IS NULL
ou encore :
SELECT usr_login, COALESCE(grp_id, 0) AS grp_id FROM memberships_mbr m LEFT OUTER JOIN groups_grp g ON m.mbr_group_ref = p.grp_id LEFT OUTER JOIN users_usr u ON m.mbr_user_ref = u.usr_id AND u.usr_domain_ref = 4