Diese Abfrage gibt alle Benutzer (einschließlich ihrer E-Mails) zurück, die per PM / E-Mail an eine Gruppen-Inbox schreiben, mit Ausnahme der Mitglieder der Gruppe.
Der Anwendungsfall ist eine reibungslose Möglichkeit, Personen auf einer physischen Veranstaltung zu ermöglichen, einen gestaffelten Benutzer für meine Website zu erstellen.
Ich habe festgestellt, dass auf einer persönlichen Veranstaltung viele potenzielle Benutzer Schwierigkeiten haben, den Registrierungsprozess abzuschließen (der mindestens die Eingabe ihrer E-Mail-Adresse (korrekt), die Auswahl eines Benutzernamens und die Generierung eines Passworts umfasst. Er erfordert auch die Validierung der E-Mail und die anschließende Anmeldung. Dies ist eine große Bitte, wenn man mit Leuten plaudert / einem Vortragenden zuhört / isst / usw.!
Dies kann mit OAuth2 etwas gemildert werden, aber es gibt immer noch einiges zu tun und die technisch weniger versierten scheinen auch damit Schwierigkeiten zu haben.
Meine Lösung
-
Erstellen Sie eine halbprivate Gruppe mit einer einprägsamen E-Mail-Adresse (z. B. join@mycommunity.url)
-
Präsentieren Sie einen QR-Code, der einen mailto:-Link zu dieser Adresse kodiert
-
Stellen Sie die guten Leute ein, die die anschließende Aufnahme dieser Personen in die Gruppe verwalten werden
-
Fügen Sie die folgende Abfrage zu Data Explorer hinzu und gewähren Sie der Gruppe Zugriff:
-- [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
Es gibt danach noch einiges an Nacharbeit, aber zumindest erfassen Sie ihre E-Mail-Adressen zuverlässig auf eine Weise, die vom Benutzer nur zwei oder drei Klicks / Berührungen erfordert!