使用MySQL从有序列表中返回行号

时间:2011-07-01 01:41:09

标签: php mysql

我正在努力在游戏中实现“高分”部分。对于高分,我只展示前十名。那没问题。问题是我还想向用户显示他的排名。假设用户排名为300,有没有办法让MySQL订购列表,找到用户名,并以某种方式返回列表中的位置,或者我只需要将整个数据库复制到数组或其他内容并计算行直到我遇到用户?

1 个答案:

答案 0 :(得分:2)

好吧,如果你只显示前10名,我认为最简单快捷的方法是在PHP中分配排名。因此,您按照分数的顺序获取前10名得分者的列表,将列表读入PHP数组,等级将是(数组索引+ 1)。

但是,如果您希望为所有用户分配排名,则有一种方法可以执行此操作;我在我的一个实现中使用了它。我不确定是否有这样做的直接方式。这里:

  1. 创建一个临时表,例如user_rank,其中包含以下列:
    • id PK AUTO_INCREMENT
    • user_id
    • rank SMALLINT UNSIGNED
  2. 按照其分数的desc顺序检索所有用户的列表,因此最佳得分者位于顶部
  3. 将步骤2中的列表存储在临时表user_rank
  4. user_rankid为您提供每个用户的排名
  5. 您可以在同一查询中执行步骤2-3,例如:

    INSERT INTO `user_rank` (`user_id`, `rank`)
    SELECT `id`, `score`
    FROM `high_scores`
    ORDER BY `score` DESC;
    

    希望这有帮助。