ユーザーがサイト上の特定のアクションでアチーブメントを獲得するシステムを作成しています。
データベースは、ユーザー、実績、および 2 つをリンクするテーブルの 3 つに分かれています。
ランキングで重要なのは、ユーザーと実績をリンクするテーブルです。このように構造化されています (user_achievements と呼ばれます):
| id | user_id | achievement_id | created_at | updated_at |
一番上のランキングには、最も多くの成果を上げ、最初にそれを獲得した人が必要です。
組み立てられたクエリ:
SELECT user_id,
COUNT(achievement_id) AS 'total',
created_at
FROM `user_achievements`
GROUP BY user_id ORDER BY total DESC, created_at ASC LIMIT 10
このクエリは機能しますが、問題は誰が最も多くの実績を持っているか (「合計」) の「グループ化」であり、最後の created_at ユーザーをバックアップしません。最初の created_at そのユーザーに来てください。これは、その量の実績を最初に獲得した人には当てはまりません。
私のシステムは Ruby on Rails を使用しています。ActiveRecord でこのクエリの解決策はありますか?非常に役に立ちます。
どうもありがとう!私の英語でごめんなさい...