カスタムフィールドを含むユーザーのレポートを作成

これは、グループごとのユーザー情報を素早く取得するための簡単な方法として考案しました。他の人々の提案や、私よりもはるかに深く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
「いいね!」 5