Есть ли способ немного расширить эту функцию и отправлять уведомление пользователю (или группе), если опубликовано сообщение о первом визите или о возвращении?
У нас есть человек, который хотел бы выполнять роль «комитета по приветствию», но не читает каждое сообщение на крупном форуме. Было бы здорово получать об этом уведомления.
Отвечаю на свой собственный вопрос: вот запрос к Data Explorer, который позволяет получить пользователей, сделавших свои первые посты наиболее недавно:
-- [params]
-- date :start_date
SELECT u.id AS user_id, p.id AS post_id, p.created_at
FROM users u
JOIN user_stats us
ON u.id = us.user_id
JOIN posts p
ON u.id = p.user_id
WHERE p.created_at = us.first_post_created_at
AND us.first_post_created_at BETWEEN :start_date::date AND NOW()
ORDER BY us.first_post_created_at desc
Это незначительная модификация запроса от @tshenry:
Его можно было бы улучшить, добавив фиксированный период, за который нужно искать (например, одну неделю или один месяц), но я не смог разобраться, как заставить работать выражение вроде NOW() - 7.
Чтобы исключить личные сообщения, нужно выполнить соединение с таблицей topics (используя внешний ключ posts.topic_id) и проверить столбец archetype. Добавьте это перед предложением WHERE:
Уведомления о постах на самом деле хранятся в таблице post_custom_fields, поэтому вы можете получить более точный список постов следующим образом:
-- [params]
-- int :days_ago = 7
SELECT p.created_at,
p.id AS post_id,
p.user_id,
pcf.value AS "тип уведомления"
FROM post_custom_fields pcf
INNER JOIN posts p ON pcf.post_id = p.id
INNER JOIN topics t ON p.topic_id = t.id
WHERE pcf.name = 'notice_type'
AND p.created_at > NOW() - INTERVAL ':days_ago days'
AND t.archetype = 'regular'
ORDER BY p.created_at ASC