繁体   English   中英

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

[英]Return a row number from an ordered list with MySQL

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

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

但是,如果您希望为所有用户分配等级,有一种方法可以做到这一点; 我在我的一个实现中使用了它。 我不确定是否也有直接的方法。 这里:

  1. 创建一个临时表,比如user_rank并包含以下列:
    • id PK AUTO_INCREMENT
    • user_id
    • rank SMALLINT UNSIGNED
  2. 按分数的降序检索所有用户的列表,因此得分最高的人在顶部
  3. 将来自 step2 的列表存储在临时表user_rank
  4. user_rank id为您提供每个用户的排名

您可以在同一个查询中执行步骤 2-3,例如:

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

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM