Data explorer 查询能否返回某些帖子通知?

有没有办法扩展此功能,以便在发布“首次访问”或“回访”通知时向用户(或群组)发送通知?

我们有一位希望担任“欢迎委员会”角色的成员,但无法阅读大型论坛上的每篇帖子。如果能为此类通知专门设置提醒,那就太好了。

4 个赞

回答我自己的问题,这里有一个数据浏览器查询,用于拉取最近发布第一条帖子的用户:

-- [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 或类似表达式生效。

此外,排除私信(正如 @tshenry 的另一个查询所述)[Return all non-PM topics that have not received a staff reply] 会很棒,但作为 SQL 新手,我需要花费大量时间才能弄清楚如何实现。

7 个赞

我认为您可以使用类似以下内容:

AND us.first_post_created_at > NOW() - INTERVAL '7 DAYS'

(postgresql 日期/时间文档)

要排除私信,您需要连接到 topics 表(遵循 posts.topic_id 外键),并检查 archetype 列。在 WHERE 子句之前添加以下内容:

JOIN topics t ON p.topic_id = t.id

…并在 ORDER BY 之前添加以下内容:

AND t.archetype = 'regular'
6 个赞

帖子通知实际上存储在 post_custom_fields 表中,因此您可以像这样获取更精确的帖子列表:

-- [params]
-- int :days_ago = 7

SELECT p.created_at,
       p.id AS post_id,
       p.user_id,
       pcf.value AS "notice type"
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
9 个赞

太棒了!谢谢,这要好得多。

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.