Assegnato un badge in base all'assegnazione di più badge

Ciao

1 Mi Piace

Questo è possibile. :+1:

Li stai assegnando manualmente (usando il data explorer + award in blocco) o li stai attivando tramite SQL?

Entrambi. La maggior parte sono manuali ma sto cercando di automatizzare tutto.

Per uno personalizzato attivato, penso che dovresti essere in grado di copiare la query Campaigner e modificarla per funzionare per i badge invece che per gli inviti.

Questo è per avere 5 ‘Badge 108’, e verrebbe impostato per aggiornarsi quotidianamente.

SELECT u.id user_id, current_timestamp granted_at
FROM users u
WHERE u.id IN (
    SELECT ub.user_id
    FROM user_badges ub
    WHERE ub.badge_id = 108
    GROUP BY ub.user_id
    HAVING COUNT(*) >= 4
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
    (:backfill OR u.id IN (:user_ids) )

L’ho testato brevemente sul mio sito di prova e sembra funzionare bene (attivo il job Sidekiq di Badge Grant per velocizzare l’attesa). Ma spero che questo ti dia almeno un punto di partenza su cui costruire. :slightly_smiling_face:

Ci sono anche alcuni esempi diversi qui che puoi usare come ispirazione, se non l’hai ancora trovato, Some common badge queries :+1:

3 Mi Piace

Grazie, ma ho un errore nella mia installazione

> ActiveRecord::PreparedStatementInvalid: valore mancante per :backfill in /*
>  * DataExplorer Query
>  * Query: /admin/plugins/explorer?id=13
>  * Avviato da: alefattorini
>  */
> WITH query AS (
> SELECT u.id user_id, current_timestamp granted_at 
> FROM users u 
> WHERE u.id IN ( 
>     SELECT ub.user_id 
>     FROM user_badges ub 
>     WHERE ub.badge_id = 102
>     GROUP BY ub.user_id 
>     HAVING COUNT(*) >= 1
> ) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND 
>     (:backfill OR u.id IN (:user_ids) )
> ) SELECT * FROM query
> LIMIT 1000

Sembra che anche la rimozione di
(:backfill OR u.id IN (:user_ids) )

funzioni bene.
È obbligatorio?

Sembra che tu l’abbia eseguito nell’esploratore di dati. Per i badge SQL personalizzati dovresti attivare l’impostazione del sito nascosta e aggiungere la query alla pagina dei badge:

Tuttavia, non tutti possono farlo a seconda del loro pacchetto di hosting.

Ma anche uno dell’esploratore di dati è più che possibile se non puoi avere quelli attivati da SQL personalizzato. :+1: Penso che dovresti fare alcune scelte su quanto spesso lo eseguissi e su come i badge verrebbero assegnati dai risultati (manualmente uno per uno, o tramite l’assegnazione in blocco), ma è sicuramente fattibile.

Qualcosa di semplice potrebbe essere meglio, anche se forse vuoi aggiungere anche un parametro di intervallo di date?

WITH foo AS (SELECT ub.user_id,count(ub.user_id), max(ub.granted_at) granted_at
FROM user_badges ub
WHERE ub.badge_id=108
GROUP BY ub.user_id)

SELECT user_id, granted_at
FROM foo
WHERE count >4
ORDER BY granted_at DESC

Ho abilitato questa funzione. Funziona a meraviglia :smiley: grazie

1 Mi Piace

È fantastico. :slightly_smiling_face: Trovo utile copiare le query di badge esistenti e apportare qualche modifica per avere un’idea da dove iniziare. Sono sicuro che potranno poi essere ulteriormente perfezionate se dovessi riscontrare problemi con una. :+1:

1 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.