gpt4 book ai didi

php - 如何从 MySQL 和 PHP 中的 500 万行记分牌中获得排名?

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

我有一个排行榜,其中有一个“得分”列。我在分数列上也有一个索引,它允许我非常快速地按分数对表进行排序,甚至可以切出前十名或任意数量的分数——即使有 500 万行!

但是,我真正想要的是在排行榜中也显示玩家的“排名”。我尝试了几种方法,但在处理超过 100000 行的任何内容时似乎都没有成功(它们开始占用超过半秒,考虑到我预计有数百个并发用户,这太长了)。

我目前正在使用以下查询来确定一个用户的排名,然后在我的输出中为高于此的用户简单地递增 - 但它非常慢。

SELECT  tro.score, tro.userId,  
(
SELECT count(*)
FROM scoreboard tri
WHERE tri.score >= :score
) AS rank
FROM test_tracks tro
WHERE userId = :userID");

我正在考虑生成一个排名表来“缓存”用户在将新分数插入记分板时的排名,但即使生成它也需要很长时间(几分钟,可能几小时)。

有人知道建立排名的任何好的指南或技巧吗?最好我也希望能够对结果进行分页,但即使只是暂时建立排名就足够了!

提前致谢!

最佳答案

执行此操作的最佳方法是使用一个定期更新的表(每小时一次,每天一次等),该表可以接受更长的查询并运行它.没有必要一直用这些繁重的查询来破坏数据库。这也意味着长时间运行的查询只运行一次,而不是针对浏览该页面的每个用户。

SO 上有一个完美的例子,其中 weekly/monthly/yearly总数每天更新一次。

关于php - 如何从 MySQL 和 PHP 中的 500 万行记分牌中获得排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897757/

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