gpt4 book ai didi

php - mySQL "Rank in Highscore"- 查询

转载 作者:可可西里 更新时间:2023-11-01 08:01:22 24 4
gpt4 key购买 nike

嗨,世界各地的程序员,

我正在开发一个项目,用户可以在其中做某些事情并获得积分。为了简化这个问题,假设我们有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com