La nostra community è incentrata sui topic fissati (pinned) e globalmente fissati (globally pinned). Purtroppo, non esiste alcun conteggio statistico relativo a questo nelle pagine del profilo utente e sembra che i pin/global pin non siano memorizzati in modo sistematico in alcun punto del database.
Alla luce di ciò, sto cercando un modo per assegnare almeno badge come “Primo topic fissato”, “10 topic fissati”, “100 topic fissati”, nonché per i topic globalmente fissati.
Qualcuno potrebbe gentilmente aiutarmi con il codice SQL per i badge di questo tipo?
Il mio punto di partenza:
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 t.unpinned IS NOT NULL
GROUP BY p.user_id
HAVING count(*) > 5
Ma questo mi restituisce l’errore:
ERROR: column t.unpinned does not exist
LINE 6: WHERE t.unpinned IS NOT NULL
Immagino di dover fare affidamento su “unpinned”, dato che non esiste alcun altro dato associato ai topic che siano stati fissati in passato, per quanto ne sappia. Oppure potrei utilizzare “post_actions”?
O forse cercare il primo post in un topic effettuato da un utente staff/sistema che contenga “pinned … ago” per fare il conteggio? action_code => pinned.disabled
Aggiornamento: Sembra che questo funzioni in qualche modo…
SELECT t.user_id, current_timestamp granted_at
FROM badge_posts p
INNER JOIN topics t on t.id = p.topic_id
WHERE p.action_code ilike 'pinned.disabled'
GROUP BY t.user_id
HAVING count(*) > 0
Ma non sono sicuro che sia l’approccio migliore e, dato che un post può essere fissato e defissato più volte… non sono certo che questa query catturi solo UN “pinned.disabled” per topic.id.
Apprezzerei molto l’aiuto di un mago del SQL per i badge.
O anche la considerazione di memorizzare i pin in modo sistematico nel database, come avviene per i “like”, e di visualizzarli nella sezione Statistiche del profilo utente, con link tipo “È STATO FISSATO”. Perché se un topic viene fissato, è un segno di apprezzamento molto maggiore rispetto ai like e dovrebbe essere preso in considerazione.
