Cette requête renvoie tous les utilisateurs qui ne font pas partie du groupe « group-of-users ».
Pour utiliser cette requête, remplacez simplement « group-of-users » par le slug du groupe. Vous obtiendrez une liste de noms d’utilisateur des personnes qui ne font pas partie du groupe « group-of-users ».
Tous les utilisateurs hors groupe
-- [params]
-- string :group_name = group-of-users
WITH group_members AS(
SELECT
u.username, u.id AS user_id, g.name
FROM users u
JOIN group_users gu
ON gu.user_id = u.id
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
),
all_users AS(
SELECT
u.username
FROM users u
)
SELECT all_users.username
FROM all_users
EXCEPT
SELECT group_members.username
FROM group_members
Et pour compléter, voici une requête pour obtenir tous les utilisateurs d’un groupe « group-of-users »
Tous les utilisateurs dans le groupe
-- [params]
-- string :group_name = group-of-users
SELECT
u.username, u.id AS user_id, g.name
FROM users u
JOIN group_users gu
ON gu.user_id = u.id
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name