Daten-Explorer-Abfrage zum Abrufen bestimmter Beitragsbenachrichtigungen?

Gibt es eine Möglichkeit, diese Funktion etwas zu erweitern und eine Benachrichtigung an einen Benutzer (oder eine Gruppe) zu senden, wenn ein Hinweis zum „ersten Besuch" oder zur „Rückkehr" veröffentlicht wurde?

Wir haben jemanden, der die Rolle des „Willkommenskommitees" übernehmen möchte, aber nicht jeden Beitrag in einem großen Forum liest. Es wäre großartig, dies als Benachrichtigung für diese Person einzurichten.

Ich beantworte meine eigene Frage: Hier ist eine Data-Explorer-Abfrage, um die Benutzer abzurufen, die kürzlich ihren ersten Beitrag verfasst haben:

-- [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

Dies ist eine kleine Anpassung dieser Abfrage von @tshenry:

Man könnte sie verbessern, indem man einen festen Zeitraum festlegt, den sie zurückblickt, z. B. eine Woche oder einen Monat – das hat mich jedoch überfordert, da ich nicht herausbekommen habe, wie man NOW() - 7 oder Ähnliches zum Laufen bringt.

Außerdem wäre es toll, private Nachrichten auszuschließen wie in einer anderen Abfrage von @tshenry, aber da ich ein SQL-Anfänger bin, würde es mich ewig kosten, herauszufinden, wie man das umsetzt.

Ich denke, du würdest so etwas wie Folgendes benötigen:

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

(postgresql date/time docs)

Um PMs auszuschließen, musst du die Tabelle topics verknüpfen (über den Fremdschlüssel posts.topic_id) und die Spalte archetype prüfen. Füge dies vor der WHERE-Klausel hinzu:

JOIN topics t ON p.topic_id = t.id

…und dies vor der ORDER BY-Klausel:

AND t.archetype = 'regular'

Die Post-Hinweise werden tatsächlich in der Tabelle post_custom_fields gespeichert, sodass Sie eine genauere Liste der Posts wie folgt abrufen können:

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

SELECT p.created_at,
       p.id AS post_id,
       p.user_id,
       pcf.value AS "Hinweistyp"
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

Absolut genial! Vielen Dank, das ist viel besser.