Ich habe mir das hier als einfache Möglichkeit ausgedacht, schnell Benutzerinformationen pro Gruppe zu erhalten. Es wurde basierend auf Vorschlägen anderer und von jemandem, der SQL viel tiefer versteht als ich es jemals werde, zusammengebastelt.
Es ist nützlich, wenn Sie eine Gruppe klonen, Überwachungseinstellungen auf Personen anwenden müssen, die bereits in einer Gruppe sind, einer Gruppe eine herkömmliche E-Mail senden, herausfinden wollen, was in ihren benutzerdefinierten Feldern enthalten ist, ohne alle Benutzerdaten auszudumpen, einige Informationen einer ausgewählten Gruppe offenlegen möchten usw.
Sie können dies mit einem schönen direkten Admin-Link oder Ihren benutzerdefinierten Feldern anpassen, wie in den Kommentaren im Code beschrieben.
Wir scheinen hier auf Meta derzeit keine großartige Repository für Data-Explorer-Abfragen zu haben. Ich hoffe, dass es hier in Ordnung ist.
--[params]
-- string :group_name
With included_users AS (
SELECT
gu.user_id
FROM group_users gu
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
),
e AS (
SELECT email, user_id
FROM user_emails u
WHERE u.primary = true
)
SELECT
u.id AS user_id, u.name, u.username, e.email
-- die nächste Zeile gibt Ihnen einen direkten Link zum Admin-Bereich des Benutzers
-- concat('/admin/users/',u.id,'/',u.username) AS admin_access_url
-- die Zeile unten mit MAX ermöglicht es Ihnen, benutzerdefinierte Benutzerfelder abzurufen, nach Bedarf replizieren
-- ersetzen Sie 'Name des Felds' und "Anzeigename" durch Ihr Zielfeld
-- MAX(CASE ucf.name WHEN 'Name des Felds' THEN value END) AS "Anzeigename"
-- *stellen Sie sicher, dass alle Felder außer dem letzten ein Komma am Ende haben*
FROM users as u
LEFT JOIN user_custom_fields AS ucf on u.id = ucf.user_id
RIGHT JOIN e on u.id = e.user_id
RIGHT JOIN user_fields AS uf on concat('user_field_', uf.id) = ucf.name
WHERE u.id IN (SELECT user_id FROM included_users)
GROUP BY u.id, e.email
ORDER BY u.username asc