MySQL评分系统 - 从评分云中获得单个用户排名

时间:2012-09-21 08:19:27

标签: mysql

我有一个游戏和用户的分数表,用户可以为每个游戏分数很多:

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中执行此操作,或者我可以使用更好的查询来获得更好的结果?

2 个答案:

答案 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;