Anzahl der kürzlichen Markierungen in einer bestimmten Kategorie abrufen

Hallo zusammen :grinning:

Ich arbeite daran, ein Plugin zu meiner Discourse-Instanz hinzuzufügen, das feststellt, ob in einer Kategorie kürzlich eine bestimmte Anzahl von Flaggen gesetzt wurde. Idealerweise würde es die Anzahl der Flaggen zurückgeben, die in einer Kategorie über einen Zeitraum gesetzt wurden (z. B. Anzahl der Flaggen in den letzten 20 Minuten für Kategorie mit ID X).

Ich spiele mit dem Data Explorer-Plugin herum, bin aber nicht sehr vertraut mit SQL und bin mir nicht sicher, ob das, was ich versuche, möglich ist. Es scheint, als könnte ich dies pro Beitrag mit der Tabelle post_actions erreichen, da post_id für Post-Aktionen gespeichert ist. Idealerweise würde ich dies mit einer einzigen Abfrage erreichen, anstatt die Flaggenanzahl für einzelne Beiträge in einer Kategorie manuell zu summieren.

Wenn jemand helfen kann, wäre ich dankbar!

Hallo @tpsReports,

Ich habe keine sehr robuste Discourse-Instanz zur Verfügung, auf der ich dies gründlich testen kann, aber ich denke, diese Data Explorer-Abfrage könnte Sie in die richtige Richtung bringen. (Jemand anderes kann wahrscheinlich noch etwas daran verbessern!)

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 diesem Beispiel habe ich die Zeit seit der Erstellung des Flags auf 20 Minuten (Zeile 6) festgelegt, da dies dem von Ihnen in Ihrem Beispiel angegebenen Wert entspricht.
In der 7. Zeile habe ich die Kategorie-ID 4 verwendet, aber Sie müssen die spezifische Kategorie-ID für die Kategorie verwenden, die Sie verfolgen möchten.

Wenn Sie sich mit dem Kategorienamen auf die Kategorie beziehen möchten, könnten Sie der Abfrage einen weiteren Join hinzufügen, sodass sie wie folgt aussieht:

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'

Ersetzen Sie dann General in Zeile 8 durch den Namen Ihrer Kategorie. Beachten Sie, dass die Kategorienamen Groß- und Kleinschreibung beachten.

Bitte lassen Sie mich wissen, ob das hilft!

4 „Gefällt mir“

@southpaw Mich hast du erwischt; ich wollte gerade :smile: posten

Wenn du interessiert bist, habe ich benutzerdefinierte Felder hinzugefügt, die du ausfüllen könntest:

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

Du kannst mehrere Kategorien-IDs und benutzerdefinierte Intervalle (wie 1h, 30 min, 3 Monate usw.) eingeben

Hinweis: Ich habe the post_action_type_id 6 beibehalten, was meiner Meinung nach damit zusammenhängt, dass ein Benutzer eine Warnung erhält; ich bin mir nicht sicher, ob du das auch zählen möchtest; du kannst es dann gerne entfernen.

3 „Gefällt mir“

Nur zur Information, aber 6 ist ‘Notify User’, was das für eine Benutzer-Benutzer-PM ist, die aus dem Flagging-Menü initiiert wird: :+1:

Es ist jedoch möglich, dass ein Moderator dies als offizielle Verwarnung markiert.

3 „Gefällt mir“

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