Uno dei nostri utenti ha segnalato di ritenere di meritare un badge specifico. Ho dato un’occhiata alla pagina di amministrazione dei badge e ho eseguito la query Preview granted badges, ma non risulta nella lista.
Il modo migliore per verificare l’idoneità potenziale è utilizzare qualcosa come Data Explorer per ottenere più informazioni dal database?
Sulla pagina del badge vera e propria (tramite la tua dashboard di amministrazione) puoi visualizzare in anteprima i risultati della query, che credo sia esattamente ciò che hai fatto.
Eseguire la stessa query tramite Data Explorer dovrebbe restituire gli stessi risultati.
Se sei ancora bloccato, inviaci una email e ti aiuteremo a fare chiarezza.
Riceviamo diverse domande sul badge Aficionado (100 giorni consecutivi). Di solito il problema è che un utente ha saltato uno o più giorni a causa delle differenze di fuso orario tra la sua località e l’orario del server.
Sono sempre stato un po’ confuso dalla query utilizzata per assegnare il badge. Credo di averla capita ora. Ecco una query Data Explorer che utilizza una logica simile. Restituisce i periodi di visite consecutive per un utente. Restituisce la data di inizio, il numero di giorni consecutivi e la data di fine per ogni periodo di visite consecutive. Per impostazione predefinita, restituisce tutti i periodi con 10 o più visite. Per scoprire quali giorni un utente ha saltato, imposta il parametro min_days a 1.
Se il valore period_end restituito nella prima riga dei risultati corrisponde alla data corrente in cui stai eseguendo la query, l’utente è ancora in corsa per il badge.
--[params]
-- string :username
-- int :min_days = 10
WITH consecutive_visits AS (
SELECT user_id,
visited_at,
-- Il valore di s sarà lo stesso per ogni gruppo di giorni consecutivi
visited_at - (DENSE_RANK() OVER (PARTITION BY user_id ORDER BY visited_at))::int s
FROM user_visits
WHERE user_id = (SELECT id FROM users WHERE username = :username)
)
SELECT
MIN(visited_at) period_start,
COUNT(*) AS consecutive_days,
MAX(visited_at) period_end
FROM consecutive_visits
GROUP BY user_id, s
HAVING COUNT(*) >= :min_days
ORDER BY period_start DESC