これは、グループごとのユーザー情報を素早く取得するための簡単な方法として考案しました。他の人々の提案や、私よりもはるかに深くSQLを理解している人からの助言を組み合わせて作りました。
グループのクローン作成、既存のグループメンバーへの監視設定の適用、グループへの従来のメール送信、全ユーザーデータをダンプせずにカスタムフィールドの内容を確認する、特定のグループに情報を公開するなどの場面で役立ちます。
コード内のコメントに従って、直接管理者リンクやカスタムフィールドをこのスクリプトにカスタマイズできます。
現在、MetaにはData Explorer クエリの優れたリポジトリがないようです。ここに投稿しても問題ないでしょうか。
--[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
-- 次の行はユーザーの管理者パネルへの直接リンクを提供します
-- concat('/admin/users/',u.id,'/',u.username) AS admin_access_url
-- 以下の行の MAX を使用すると、ユーザーのカスタムフィールドを取得できます。必要に応じて複製してください
-- 'フィールド名' と '表示名' を対象フィールドに置き換えてください
-- MAX(CASE ucf.name WHEN 'フィールド名' THEN value END) AS "表示名"
-- *最後のフィールドを除くすべてのフィールドの後にカンマを入れることを忘れないでください*
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