gpt4 book ai didi

mysql - 游戏排名位置

转载 作者:行者123 更新时间:2023-11-29 14:28:21 24 4
gpt4 key购买 nike

我有一个游戏中得分高的玩家列表。如果我的名字是“jimbo”,我想得到我的分数,并得到我的排名位置以及排名中仅次于我的人,好2位和差2位。

CREATE TABLE `players` (
`id` bigint(100) NOT NULL AUTO_INCREMENT,
`playername` varchar(15) NOT NULL,
`email` varchar(300) NOT NULL,
`highscore` bigint(100) NOT NULL,
PRIMARY KEY (`id`)
ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=106 ;

最佳答案

实现此目的的一种方法是使用临时表:

CREATE TEMPORARY TABLE ranked_players AS
SELECT id, playername, @rownum:=@rownum+1 AS rank
FROM players
JOIN (SELECT @rownum:=0) AS RANK
ORDER BY highscore DESC;

如果您想确保具有相同高分的玩家的顺序一致,您可能需要添加idplayername

现在您需要计算出玩家的排名(请注意,MySQL 不允许您在同一查询中两次使用临时表,因此不能将其放入下一条语句的子查询中):

SELECT rank
INTO @myrank
FROM ranked_players
WHERE playername = 'jimbo';

然后您需要获取排名从 2 位到下降 2 位的玩家范围:

SELECT players.*
FROM players
JOIN ranked_players USING (id)
WHERE rank BETWEEN (@myrank - 2) AND (@myrank + 2)
ORDER BY highscore DESC;

然后清理临时表:

DROP TEMPORARY TABLE ranked_players;

最后,如果您在实际表中预先计算具有排名的用户列表,则可以将其简化为单个查询,只要对您的应用程序有意义,您就可以刷新该表(我假设这是性能和实时性之间的折衷)。您随后使用的查询可以轻松地从上述查询中派生出来,不同之处在于您不受我提到的临时表的限制。

关于mysql - 游戏排名位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513469/

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