我正在努力在游戏中实现“高分”部分。对于高分,我只展示前十名。那没问题。问题是我还想向用户显示他的排名。假设用户排名为300,有没有办法让MySQL订购列表,找到用户名,并以某种方式返回列表中的位置,或者我只需要将整个数据库复制到数组或其他内容并计算行直到我遇到用户?
答案 0 :(得分:2)
好吧,如果你只显示前10名,我认为最简单快捷的方法是在PHP中分配排名。因此,您按照分数的顺序获取前10名得分者的列表,将列表读入PHP数组,等级将是(数组索引+ 1)。
但是,如果您希望为所有用户分配排名,则有一种方法可以执行此操作;我在我的一个实现中使用了它。我不确定是否有这样做的直接方式。这里:
user_rank
,其中包含以下列:
id
PK AUTO_INCREMENT user_id
rank
SMALLINT UNSIGNED user_rank
user_rank
。id
为您提供每个用户的排名您可以在同一查询中执行步骤2-3,例如:
INSERT INTO `user_rank` (`user_id`, `rank`)
SELECT `id`, `score`
FROM `high_scores`
ORDER BY `score` DESC;
希望这有帮助。