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