Query per Data explorer per ottenere avvisi specifici dei post?

Esiste un modo per estendere leggermente questa funzionalità e inviare una notifica a un utente (o a un gruppo) quando viene pubblicato un avviso di “primo accesso” o di “rientro”?

Abbiamo una persona che vorrebbe ricoprire il ruolo di “comitato di benvenuto”, ma che non legge ogni post in un forum di grandi dimensioni. Sarebbe ottimo poter ricevere una notifica a riguardo.

4 Mi Piace

Rispondendo alla mia stessa domanda, ecco una query per Data Explorer per estrarre gli utenti che hanno effettuato il loro primo post più di recente:

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

Questa è una piccola modifica della query di @tshenry:

Potrebbe essere migliorata impostando un intervallo di tempo fisso da cui guardare indietro, ad esempio una settimana o un mese, ma questo mi ha messo in difficoltà perché non sono riuscito a capire come far funzionare NOW() - 7 o qualcosa di simile.

Inoltre, escludere i messaggi privati (come in un’altra query di @tshenry) sarebbe fantastico, ma dato che sono un principiante di SQL, ci metterei un sacco di tempo a capire come farlo.

7 Mi Piace

Penso che tu abbia bisogno di qualcosa del genere:

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

(documentazione PostgreSQL su date/ora)

Per escludere i messaggi privati, è necessario eseguire un JOIN con la tabella topics (seguendo la chiave esterna posts.topic_id) e verificare la colonna archetype. Aggiungi questo prima della clausola WHERE:

JOIN topics t ON p.topic_id = t.id

…e questo prima della clausola ORDER BY:

AND t.archetype = 'regular'
6 Mi Piace

I post dei messaggi di avviso sono in realtà archiviati nella tabella post_custom_fields, quindi puoi ottenere un elenco più preciso dei post in questo modo:

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

SELECT p.created_at,
       p.id AS post_id,
       p.user_id,
       pcf.value AS "tipo di avviso"
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 Mi Piace

Assolutamente geniale! Grazie, è molto meglio.

3 Mi Piace

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