0

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

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 的分数比它高两个。我以为COUNT(DISTINCT user)可以解决问题,但由于某种原因它没有!

(显然我从另一个查询中获得了用户最高分并将其传递给这个查询)

有没有办法在 MySQL 中做到这一点,或者我可以使用更好的查询来获得更好的结果?

4

2 回答 2

1

也许使用 GROUP BY 会更好:

SELECT user,game, SUM(score) AS scorer
FROM scores 
GROUP BY user, game
ORDER BY scorer DESC
于 2012-09-21T08:24:10.910 回答
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;
于 2012-09-21T08:50:09.483 回答