複数のバッジ割り当てに基づいてバッジを割り当てました

皆さん、こんにちは。
ユーザーが特定のバッジを何回獲得したかに基づいてバッジを付与したいと思います。

  • Alessio は foo バッジを少なくとも 10 回獲得しました → Cool_foo バッジを獲得しました
  • Luca は foo バッジを少なくとも 15 回獲得しました → Super_foo バッジを獲得しました

SQL クエリで可能でしょうか?

「いいね!」 1

これは可能です。:+1:

手動(データエクスプローラーと一括付与を使用)で付与していますか、それともSQLでトリガーしていますか?

両方です。ほとんどは手動ですが、すべてを自動化しようとしています。

カスタムトリガーの場合、Campaignerクエリをコピーして、招待ではなくバッジ用に調整できると思います。

これは「バッジ108」を5つ持っている場合に設定され、毎日更新されるようにします。

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) )

テストサイトで簡単にテストしましたが、問題なく動作するようです(待機時間を短縮するためにBadge Grant sidekiqジョブをトリガーしました)。しかし、少なくともそこから構築するための出発点になることを願っています。:slightly_smiling_face:

まだ見つけていない場合は、インスピレーションとして使用できるいくつかの異なる例もここにあります。Some common badge queries :+1:

「いいね!」 3

インストールでエラーが発生しました

> ActiveRecord::PreparedStatementInvalid: missing value for :backfill in /*
>  * DataExplorer Query
>  * Query: /admin/plugins/explorer?id=13
>  * Started by: 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

(:backfill OR u.id IN (:user_ids) ) を削除しても、うまくいくようです。
これは必須ですか?

データエクスプローラーで実行したようです。カスタムSQLバッジについては、非表示のサイト設定をオンにして、バッジページにクエリを追加する必要があります。

ただし、ホスティングパッケージによっては、誰もがそれを実行できるわけではありません。

しかし、カスタムSQLトリガーバッジが利用できない場合でも、データエクスプローラーのバッジは十分に可能です。:+1: 実行頻度や、結果からバッジをどのように付与するか(手動で1つずつ、または一括付与)、いくつかの選択をする必要があると思いますが、間違いなく可能です。

シンプルなものが良いかもしれませんが、日付範囲パラメータも追加したいですか?

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

これは有効にしており、見事に機能します :smiley: ありがとうございます。

「いいね!」 1

既存のバッジクエリをコピーして少し変更するだけで、どこから始めればよいかのアイデアが得られるので、非常に役立つと思います。問題が発生した場合は、さらに洗練することもできます。:+1:

「いいね!」 1

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