私はゲームとユーザーのスコアの表を持っています。ユーザーはゲームごとに多くのスコアを持つことができます:
USER GAME SCORE TIMESTAMP
1 1 125 123456
2 1 120 123457
1 2 10293 123458
2 2 10253 123459
1 1 130 123460
明らかに、より多くのユーザーとゲームが存在しますが、おわかりのように、特定の時間枠でスコアを取得するために、取得したすべてのスコアをログに記録し、タイムスタンプと共に保存しています。
私がする必要があるのは、たとえば、ゲームでユーザーの個々のランクを取得することです。
user 1 - game 1 - rank 1
user 2 - game 1 - rank 2
しかし、クエリを実行しています
SELECT COUNT(DISTINCT user)
FROM scores
WHERE game = 1
AND score > $user_2_score
AND timestamp < $time_limit
ORDER BY score DESC
ユーザー 1 のスコアが 2 点高いため、このユーザーは 3 位になります。COUNT(DISTINCT user)
問題が解決すると思っていましたが、何らかの理由で解決しませんでした。
(明らかに、別のクエリからユーザーの最高スコアを取得し、それをこのクエリに渡しています)
MySQLでこれを行う方法はありますか、またはより良い結果を得るために使用できるより良いクエリはありますか?