Создать отчет о пользователях с включением пользовательских полей

Я придумал этот способ как простой и быстрый вариант получения информации о пользователях по группам. Он был собран на основе предложений других людей и от того, кто знает SQL гораздо глубже, чем я когда-либо смогу.

Он пригодится, если вам нужно клонировать группу, применить настройки подписки к людям, уже состоящим в группе, отправить группе электронное письмо по старинке, узнать содержимое их пользовательских полей без выгрузки всех данных о пользователях, раскрыть некоторую информацию выбранной группе и так далее.

Вы можете настроить это, добавив прямую ссылку для администратора или свои пользовательские поля, как указано в комментариях в коде.

Кажется, у нас сейчас нет отличного репозитория для запросов Data Explorer здесь, на Meta. Надеюсь, что здесь это допустимо.

--[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 лайков