Crear un informe de usuarios incluyendo campos personalizados

He ideado esto como una forma sencilla de obtener rápidamente la información de los usuarios por grupo. Ha sido ensamprado de manera informal a partir de las sugerencias de otros y de alguien que conoce SQL mucho más a fondo de lo que yo jamás lo haré.

Resulta útil si necesitas clonar un grupo, aplicar configuraciones de seguimiento a personas que ya están en un grupo, enviar un correo electrónico tradicional a un grupo, descubrir qué hay en sus campos personalizados sin volcar todos los datos de los usuarios, revelar cierta información a un grupo selecto, etc.

Puedes personalizarlo con un enlace directo de administración o con tus campos personalizados, según los comentarios en el código.

Parece que no tenemos un gran repositorio de consultas de Data Explorer aquí en Meta ahora. Espero que esté bien publicar esto aquí.

--[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
    -- la siguiente línea te proporciona un enlace directo al panel de administración del usuario
    -- concat('/admin/users/',u.id,'/',u.username) AS admin_access_url
    -- la línea de abajo con MAX te permite extraer los Campos Personalizados de Usuario, réplica según sea necesario
    -- reemplaza 'nombre del campo' y "nombre de visualización" con tu campo objetivo
    -- MAX(CASE ucf.name WHEN 'nombre del campo' THEN value END) AS "nombre de visualización"
    -- *asegúrate de que todos los campos excepto el último tengan una coma después de ellos*

  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 Me gusta