php - mySQL "Rank in Highscore"- 查询

标签 php mysql

嗨,世界各地的程序员,

我正在开发一个项目,用户可以在其中做某些事情并获得积分。为了简化这个问题,假设我们有 2 个表userpoints

-- table user       -- table points
+---------------+    +-----------------------------+
|  id  |  name  |    |  id  |  points  |  user_id  |
+---------------+    +-----------------------------+
|  1     Tim    |    |  1      5          1        |
|  2     Tom    |    |  2      10         1        |
|  3     Marc   |    |  3      5          1        |
|  4     Tina   |    |  4      12         2        |
|  5     Lutz   |    |  5      2          2        |
+---------------+    |  6      7          1        |
                     |  7      40         3        |
                     |  8      100        1        |
                     +-----------------------------+

现在要获得完整的高分列表,我使用以下查询

SELECT u.*, SUM( p.points ) AS sum_points
FROM user u
LEFT JOIN points p ON p.user_id = u.id
GROUP BY u.id
ORDER BY sum_points DESC

导致所有用户从头到尾的高分列表

+------------------------------+
|  id  |  name  |  sum_points  |
+------------------------------+
|  1     Tim       127         |
|  3     Marc      40          |
|  2     Tom       14          |
|  4     Tina      0           |
|  5     Lutz      0           |
+------------------------------+

好了回到问题本身。在单个用户的个人资料上,我想显示他在高分列表中的排名。

这是否可以使用单个查询来完成,例如仅显示 Tom (id=2) 排名第 3 位?

非常感谢:-)

最佳答案

想法是询问“有多少玩家排名高于@this_user”:

select count(*) + 1 from 
(
    /* list of all users */
    SELECT SUM( p.points ) AS sum_points
    FROM user u
    LEFT JOIN points p ON p.user_id = u.id
    GROUP BY u.id        
) x
/* just count the ones with higher sum_points */
where sum_points > (select sum(points) from points where user_id = @this_user)

编辑使结果基于 1 而不是基于 0

关于php - mySQL "Rank in Highscore"- 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118511/

相关文章:

mysql - 使用 jpa 进行内连接和子查询

MySQL PDO 最后插入的 ID

php - 如何通过传递国家代码或国家名称在php中获取时区

php - 使用 XML 作为动态 AJAX 页面的数据库

php - Symfony2 - 未找到类

php - Laravel 5 路由组和组内的 Basic(/) GET 路由

java - MySql 中的加密数据

mysql - 如何使用 Sequelize CLI 从 Sequelize 模型自动生成迁移?

php - 通过 mysql 上的变量发送 "null"不会删除该行

php - Woocommerce - 如何在单独的页面上显示订单详细信息(我的帐户)