У нас на форуме есть рабочий процесс: мы назначаем темы группе, и как только группа считает, что сделала всё, что могла по конкретной теме, она снимает с себя это назначение. Это гарантирует, что такие темы исчезают из списка тех, за которые группа всё ещё отвечает.
Кроме того, для нашей собственной отчётности («какие темы обычно назначаются группе ____») мы хотели бы иметь возможность искать на форуме все случаи назначения групп.
Неужели существует какой-то синтаксис поиска, с которым я не знаком, или у вас есть идеи, как составлять такие отчёты? Мне кажется, я просто упускаю какой-то синтаксис, поскольку вся информация о назначениях групп (как прошлых, так и текущих) видна при просмотре темы.
Вы можете извлечь эти данные с помощью плагина Data Explorer.
Надеемся, что приведенный ниже запрос вам поможет.
1. Список всех тем, которые в настоящее время назначены группе
SELECT
g.name group_name,
a.topic_id,
a.assigned_by_user_id,
a.created_at
FROM assignments a
INNER JOIN groups g ON g.id = a.assigned_to_id
WHERE assigned_to_type = 'Group'
ORDER BY g.name, created_at DESC
2. История назначения тем группам
SELECT
pcf.value AS group,
p.topic_id,
p.user_id AS "assigned_by_user_id",
pcf.created_at::date
FROM posts p
INNER JOIN post_custom_fields pcf ON pcf.post_id = p.id
WHERE action_code = 'assigned_group'
AND pcf.name = 'action_code_who'
ORDER BY pcf.value, pcf.created_at DESC
К концу дня мы уже начали собирать похожий запрос (нахождение таблицы post_custom_fields нас просто поразило), но ваш в итоге оказался намного чище.
Мы заметили, что некоторые записи отсутствовали, когда темы были напрямую переназначены, а не сначала отменены, а затем назначены снова, поэтому я немного изменил условие WHERE, чтобы учесть это. В итоге мы пришли к следующему:
SELECT
pcf.value AS group,
p.topic_id,
p.user_id AS "assigned_by_user_id",
pcf.created_at::date
FROM posts p
INNER JOIN post_custom_fields pcf ON pcf.post_id = p.id
WHERE (action_code = 'assigned_group' OR action_code = 'reassigned_group')
AND pcf.name = 'action_code_who'
ORDER BY pcf.value, pcf.created_at DESC