Das klingt nach einer interessanten Methode, dies zu erreichen. Ich wäre daran interessiert, mehr zu erfahren, wenn Sie jemals weitere Details teilen möchten!
Natürlich. ![]()
Im Grunde wählst du in seiner einfachsten Form eine Reaktion, die angibt „Ich denke, das verdient einen Badge“, mit der deine Mitglieder Beiträge nominieren können, und die Abfrage erfasst, welche Beiträge diese Reaktion erhalten haben. Du kannst den Badge dann entweder manuell aus der Liste, die die Abfrage liefert, vergeben, in großen Mengen vergeben, wenn du der Liste vollständig vertraust, oder sogar die benutzerdefinierte SQL des Badges so einrichten, dass das System dies automatisch erledigt. ![]()
Du kannst die Abfrage auch mit zusätzlichen Kriterien versehen, um sie gezielter zu gestalten. Zum Beispiel: „Ein Beitrag benötigt x Anzahl dieser Reaktion“ oder „Nur diese Reaktion, die von TL2+ gegeben wurde, zählt“.
Es funktioniert auch mit benutzerdefinierten Emojis, falls es kein aktuelles gab, das du für geeignet hieltest.
Danke! Ich habe mich ein wenig umgesehen, konnte aber keine Abfrage finden, die genau dazu passt. Wären Sie bereit, die Abfrage zu teilen? Ich habe noch nie selbst eine erstellt, aber ich habe das Gefühl, dass ich das lernen muss!
Ich habe eine, mit der ich gespielt habe, aber ich habe sie beiseite gelegt, um sie mit frischen Augen zu betrachten, und bin noch nicht dazu zurückgekehrt, daher muss sie möglicherweise noch überarbeitet werden. Es geht darum, eine Auszeichnung zu vergeben, basierend auf mindestens 10 Beiträgen mit der
-Reaktion, die von einem Mitglied der Gruppe „data-team“ für Beiträge in der Kategorie Data & reporting gegeben wurde:
SELECT p.user_id, MIN(p.created_at) granted_at
FROM badge_posts p
JOIN topic_tags tt ON tt.topic_id = p.topic_id
WHERE tt.tag_id = 615
AND EXISTS (
SELECT 1
FROM discourse_reactions_reactions dr
JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
JOIN group_users gu ON gu.user_id = dru.user_id
WHERE dr.post_id = p.id
AND dr.reaction_value = 'chefs_kiss'
AND gu.group_id = 175
)
GROUP BY p.user_id
HAVING COUNT(*) >= 10
Ich war jedoch nicht zufrieden damit, MIN zu verwenden, da es das falsche Vergebungsdatum lieferte.
Es gibt viele Kriterien dafür, und es ist automatisch, was es meiner Meinung nach eher am komplizierteren Ende ansiedelt. Ich denke, eine einfachere könnte ohne viel Aufwand viel besser erreichbar sein.
Vielen Dank, das hat geholfen! Das sollte wahrscheinlich in ein neues Thema verschoben werden, da wir vom Thema abweichen. Aber hier ist die Abfrage, die ich (mit Hilfe von ChatGPT) erstellt habe, die einfach die Benutzer zurückgibt, die die Reaktion gegeben/erhalten haben, wie viele Reaktionen, das Datum der Reaktion und die URL zum spezifischen Beitrag. Das Einzige, was ich nicht geschafft habe, war, die URL zum Beitrag klickbar zu machen, es scheint, dass dies auf Themen-URLs beschränkt ist.
WITH reaction_pairs AS (
SELECT
p.user_id AS received_reaction_user_id,
dru.user_id AS gave_reaction_user_id,
dr.post_id,
t.id AS topic_id,
t.slug AS topic_slug,
p.post_number,
dru.created_at AS reaction_date
FROM
discourse_reactions_reactions dr
JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
JOIN posts p ON dr.post_id = p.id
JOIN topics t ON p.topic_id = t.id
WHERE
dr.reaction_value = 'Your_Specific_Reaction_Here'
)
SELECT
ur1.id AS user_id,
ur2.username AS "Benutzer, der die Reaktion gegeben hat",
'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS "Beitrags-URL",
rp.reaction_date AS "Reaktionsdatum",
COUNT(*) AS "Anzahl der Reaktionen"
FROM
reaction_pairs rp
JOIN users ur1 ON rp.received_reaction_user_id = ur1.id
JOIN users ur2 ON rp.gave_reaction_user_id = ur2.id
GROUP BY
ur1.id,
ur2.username,
rp.topic_slug,
rp.topic_id,
rp.post_number,
rp.reaction_date
ORDER BY
"Anzahl der Reaktionen" DESC, "Reaktionsdatum" DESC
Damit dieser Teil seine Magie entfalten kann, hängen Sie _url an den Spaltennamen an, also:
'Your_Community_URL' || 't/' || rp.topic_slug || '/' || rp.topic_id || '/' || rp.post_number AS post_url