特定の投稿通知を返すためのデータエクスプローラークエリ?

この機能を少し拡張して、初回投稿や復帰投稿が投稿された際に、ユーザー(またはグループ)に通知を送信する方法はありますか?

大規模なフォーラムでは、すべての投稿を読むことが難しい「歓迎委員会」の役割を担いたい方がいます。そのような方に対して、通知として機能すると非常に便利です。

「いいね!」 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 による以下のクエリを少し修正したものです:

過去一定期間(例えば 1 週間や 1 ヶ月)を遡って検索するように改善することも可能ですが、NOW() - 7 のような書き方がどうすれば機能するか分からず、私はそこでつまずいてしまいました。

また、@tshenry の別のクエリ にあるように PM を除外することもできれば素晴らしいのですが、私は SQL の初心者なので、その方法を理解するのに非常に時間がかかりそうです。

「いいね!」 7

以下のようなクエリが必要ではないでしょうか:

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

(postgresql 日付/時刻ドキュメント)

PM を除外するには、posts.topic_id 外部キーをたどって topics テーブルと結合し、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.