Criar um relatório de usuários incluindo campos personalizados

Criei isso como uma maneira fácil de obter rapidamente informações de usuários por grupo. Foi montado com base nas sugestões de outras pessoas e de alguém que conhece SQL muito mais profundamente do que eu jamais conhecerei.

É útil se você precisar clonar um grupo, aplicar configurações de acompanhamento a pessoas já em um grupo, enviar um e-mail tradicional para um grupo, descobrir o que há em seus campos personalizados sem despejar todos os dados do usuário, revelar algumas informações a um grupo seleto, etc.

Você pode personalizar isso com um link direto para o painel de administração ou seus campos personalizados, conforme descrito nos comentários do código.

Parece que não temos um repositório excelente para Consultas do Explorador de Dados aqui no Meta agora. Espero que este local seja adequado.

--[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
    -- a próxima linha fornece um link direto para o painel de administração do usuário
    -- concat('/admin/users/',u.id,'/',u.username) AS admin_access_url
    -- a linha abaixo com MAX permite extrair Campos Personalizados do Usuário; repita conforme necessário
    -- substitua 'nome do campo' e "nome de exibição" pelo seu campo alvo
    -- MAX(CASE ucf.name WHEN 'nome do campo' THEN value END) AS "nome de exibição"
    -- *certifique-se de que todos os campos, exceto o último, tenham uma vírgula após eles*

  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 curtidas