我有一个游戏和用户的分数表,用户可以为每个游戏分数很多:
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
会将用户排在第3位,因为用户1的得分高于它。我认为COUNT(DISTINCT user)
可以解决问题,但由于某种原因它没有解决问题!
(显然我从其他查询获得用户最高分并将其传递给此查询)
有没有办法在MySQL中执行此操作,或者我可以使用更好的查询来获得更好的结果?
答案 0 :(得分:1)
也许使用GROUP BY会更好:
SELECT user,game, SUM(score) AS scorer
FROM scores
GROUP BY user, game
ORDER BY scorer DESC
答案 1 :(得分:0)
如果您想获得精确游戏的结果,那么您可以使用此查询 -
SELECT
user,
SUM(score) sum_score,
@r:=@r + 1 rank
FROM
scores, (SELECT @r:=0) t
WHERE
game = 1
GROUP BY
user
ORDER BY
sum_score DESC;