Hey Leute!
Ich teste hier ein paar Badge-Abfragen
Einige funktionieren einwandfrei, bei anderen bin ich noch am Ausprobieren.
Weiß jemand, wie ich eine Abfrage erstellen kann, die einem Nutzer eine Badge vergibt, der X Aufrufe in Themen hat, die in einer bestimmten Kategorie erstellt wurden? Ich habe diese Abfrage bereits erstellt, aber sie gilt nur für ein einzelnes Thema (Nutzer hat mindestens X Aufrufe in einem Thema in einer bestimmten Kategorie). Der Code lautet:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Technology'
) AND p.post_number = 1
AND views >= 10
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
Anstatt nur ein Thema zu berücksichtigen, möchte ich jedoch die Badge für diejenigen vergeben, die beispielsweise insgesamt 500 Aufrufe in der Summe aller Aufrufe aus allen Themen erhalten haben, die diese Person in der Kategorie Y erstellt hat. Weiß jemand, wie man das erreichen kann? 
Vielleicht ist das eine Lösung (weitere Tests folgen :D)
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Technology'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) > XXXXXXXXXXX
Hallo zusammen, ich habe die oben genannte Abfrage getestet und sie funktioniert! Jetzt frage ich mich, ob mir jemand bei einer weiteren Herausforderung helfen kann. Hier ist die Abfrage:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'Arts'
) AND p.post_number = 1
and (:backfill OR ( p.id IN (:post_ids) ))
GROUP BY p.user_id
HAVING SUM (views) >= 100
In diesem Beispiel: Der Benutzer, der Geschichten in der Kategorie „Kunst" erstellt und deren Geschichten 100 Aufrufe erreichen, erhält das Abzeichen. Das Problem ist jedoch Folgendes:
Ich werde diese Logik im Laufe der Zeit ändern müssen, da die Anzahl der Aufrufe steigen wird.
Dieses Abzeichen erfordert heute 100 Aufrufe, könnte aber in sechs Monaten 1000 Aufrufe erfordern.
Das Problem besteht darin, dass bei einer Änderung der Abfrage diese jeden Tag erneut ausgeführt wird und Benutzer, die das Abzeichen bereits erhalten haben, es wieder verlieren würden.
Das wäre eine Katastrophe. Stellen Sie sich vor, Sie haben (zu Beginn der Plattform) 10 Aufrufe erreicht und ein Level-2-Abzeichen in „Technologie" gewonnen. Einige Monate später wächst die Plattform, und jetzt erfordert Level 2 nicht mehr 10 Aufrufe, sondern 100. Sie würden das Abzeichen verlieren.
Gibt es eine Möglichkeit, dies zu verhindern?