Visualizzazioni totali su molteplici argomenti

Ehi ragazzi!

Sto provando alcune query per i badge :slight_smile: Alcune funzionano bene, mentre altre le sto ancora sperimentando.

Qualcuno sa come creare una query che assegni un badge a un utente che ha ottenuto X visualizzazioni nei topic creati in una categoria specifica? Sono riuscito a costruire questa query, ma funziona solo per un singolo topic (l’utente ha ottenuto almeno X visualizzazioni in un topic di una categoria specifica). Il codice è:

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

Ma invece di considerare un solo topic, vorrei assegnare il badge a coloro che raggiungono, ad esempio, 500 visualizzazioni nella somma delle visualizzazioni di tutti i topic creati da quella persona nella categoria Y. Qualcuno sa come posso ottenere questo risultato? :smiley:

Forse questa è una soluzione (ulteriori test in arrivo :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

Ciao a tutti, sono riuscito a testare la query qui sopra e ha funzionato! Ora mi chiedevo se qualcuno potesse aiutarmi con un’altra sfida. Ecco la query:

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 questo esempio: l’utente che crea storie nella categoria Arts e le cui storie raggiungono 100 visualizzazioni riceverà il badge. Il problema è che:
dovrò modificare questa logica nel tempo, perché il numero di visualizzazioni aumenterà.
Questo badge richiede oggi 100 visualizzazioni, ma potrebbe richiederne 1000 tra sei mesi.

Il problema è che quando modifico la query, questa viene rieseguita ogni giorno e gli utenti che l’hanno già ricevuto la perderebbero.

E questo sarebbe un disastro: immagina di aver raggiunto (ora, all’inizio della piattaforma) 10 visualizzazioni e di aver vinto un Badge di Livello 2 in Tecnologia. Ma qualche mese dopo la piattaforma cresce e ora il Livello 2 non richiede più 10 visualizzazioni, bensì 100. Perderesti il badge.

Esiste un modo per evitare che ciò accada?