Ottieni il conteggio delle segnalazioni recenti in una particolare categoria

Ciao a tutti :grinning:

Sto lavorando per aggiungere un plugin alla mia istanza di Discourse che determini se è stato emesso un certo numero di segnalazioni di recente in una categoria. Idealmente, restituirebbe il conteggio delle segnalazioni fornite in una categoria in un intervallo di tempo (ad esempio, il numero di segnalazioni negli ultimi 20 minuti per la categoria con id X).

Sto sperimentando con il plugin Data Explorer, ma non ho molta familiarità con SQL e non sono sicuro se ciò che sto cercando di fare sia possibile. Sembra che potrei riuscire a farlo su base per post utilizzando la tabella post_actions poiché post_id è memorizzato per le azioni sui post. Idealmente, potrei raggiungere questo obiettivo in un’unica query invece di sommare manualmente i conteggi delle segnalazioni per singoli post in una categoria.

Se qualcuno può aiutare, sarò grato!

Ciao @tpsReports,

Non dispongo di un’istanza Discourse molto robusta dove poter testare a fondo, ma penso che questa query di Data Explorer possa indirizzarti nella giusta direzione. (Qualcun altro potrà probabilmente intervenire per migliorarla!)

SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND t.category_id = '4'

In questo esempio, ho specificato il tempo trascorso dalla creazione del flag a 20 minuti (riga 6), come hai indicato nel tuo esempio.
Nella settima riga, ho utilizzato l’ID della categoria 4, ma dovrai utilizzare l’ID specifico della categoria che desideri monitorare.

Se desideri poter fare riferimento alla categoria per nome, potresti aggiungere un altro join alla query, in modo che appaia così:

SELECT count(*)
FROM post_actions AS pac
JOIN posts p on p.id = pac.post_id
JOIN topics t on t.id = p.topic_id
JOIN categories c on c.id = t.category_id
WHERE pac.post_action_type_id in ('3','4','7','8')
AND pac.created_at >= NOW() - INTERVAL '20 MINUTE'
AND c.name = 'General'

Quindi sostituisci dove ho usato General all’ottava riga con il nome della tua categoria. Tieni presente che i nomi delle categorie fanno distinzione tra maiuscole e minuscole.

Fammi sapere se questo ti è d’aiuto!

4 Mi Piace

@southpaw Mi hai beccato; stavo per postare :smile:

Se ti interessa, ho aggiunto campi personalizzati che potresti compilare:

--[params]
-- int_list :category_ids
-- text :interval = 20min

SELECT t.category_id, count(pa.id) count
from post_actions pa
INNER JOIN posts p on p.id = pa.post_id
INNER JOIN topics t on t.id = p.topic_id
WHERE post_action_type_id in (3, 4, 6, 7, 8)
    AND t.category_id in (:category_ids)
    AND pa.created_at >= now() - interval :interval
GROUP BY t.category_id

Puoi inserire più ID di categoria e intervalli personalizzati (come 1h, 30 min, 3 mesi, ecc.)

Nota: Ho mantenuto the post_action_type_id 6, che credo sia correlato a un utente che riceve un avvertimento; non sono sicuro se vuoi contarlo anche; sentiti libero di rimuoverlo allora.

3 Mi Piace

Solo per informazione, ma 6 è ‘Notify User’ che è quello per un PM utente-utente avviato dal menu di segnalazione: :+1:

Anche se è possibile per un moderatore contrassegnarlo come avvertimento ufficiale.

3 Mi Piace

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