此查询返回所有通过电子邮件发送到群组收件箱(包括他们的电子邮件)的用户,但不包括群组成员。
用例是为物理活动中的人们提供一种低摩擦的方式来为我的网站创建分阶段用户。
我发现在线下活动中,许多潜在用户难以完成注册过程(至少包括输入他们的电子邮件地址(正确)、选择用户名和生成密码)。它还需要验证电子邮件和后续登录。当人们站着聊天/听演讲/吃饭/等时,这是一个很大的要求!
虽然可以使用 OAuth2 在一定程度上缓解这种情况,但仍有一些工作要做,而且技术不太熟练的人似乎也对此感到困难。
我的解决方案
-
创建一个具有吸引人的电子邮件地址(即 join@mycommunity.url)的半私有群组。
-
提供一个 QR 码,其中包含指向该地址的 mailto: 链接。
-
安排好将负责后续添加这些人员加入群组的人员。
-
将以下查询添加到 Data Explorer,并授予群组访问权限:
-- [params]
-- string :group_name
WITH group_members AS (
SELECT gu.user_id
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
WHERE g.name = :group_name
),
non_group_users AS (
SELECT u.id, u.username, ue.email, u.created_at
FROM users u
JOIN user_emails ue ON ue.user_id = u.id
WHERE NOT EXISTS (
SELECT 1
FROM group_members gm
WHERE u.id = gm.user_id
) AND ue.primary = TRUE
),
group_messages AS (
SELECT tg.topic_id
FROM topic_allowed_groups tg
JOIN groups g ON g.id = tg.group_id
WHERE g.name = :group_name
),
group_message_participants AS (
SELECT gm.topic_id, tau.user_id AS tau_user_id FROM group_messages gm
JOIN topic_allowed_users tau ON tau.topic_id = gm.topic_id
JOIN non_group_users ngu ON ngu.id = tau.user_id
)
SELECT ngu.username, ngu.email, ngu.created_at FROM group_message_participants gmp
JOIN non_group_users ngu ON ngu.id = gmp.tau_user_id
GROUP BY ngu.username, ngu.email, ngu.created_at
ORDER BY ngu.username
之后还有一些后续工作要做,但至少您可以可靠地捕获他们的电子邮件地址,而用户只需点击两三下即可完成!