我正致力于在我的游戏中实现一个“高分”部分。对于高分,我只显示前十名。这没问题。问题是我还想向用户展示他的排名是什么。假设用户的排名是300,MySQL有没有办法对列表进行排序,找到用户名,然后以某种方式返回他在列表中的位置,或者我只需要将整个数据库复制到一个数组中,然后计算行数,直到命中用户?
发布于 2011-07-01 09:56:14
好吧,如果你只显示前10名,我认为最简单最快的方法是在PHP中分配排名。因此,您以分数的降序获取前10名得分者的列表,将该列表读取到PHP数组中,其排名将是(数组索引+ 1)。
但是,如果您希望为所有用户分配等级,有一种方法可以做到这一点;我在我的一个实现中使用了这种方法。不过,我不确定是否也有直接的方法。这里:
SMALLINT创建包含以下列的临时表:
id PK AUTO_INCREMENTuser_idrank SMALLINT UNSIGNED user_rank
user_rankuser_rank.id中为您提供每个用户的排名您可以在同一查询中执行步骤2-3,如下所示:
INSERT INTO `user_rank` (`user_id`, `rank`)
SELECT `id`, `score`
FROM `high_scores`
ORDER BY `score` DESC;希望这能有所帮助。
https://stackoverflow.com/questions/6542821
复制相似问题