首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python和SQL的记分板

使用Python和SQL的记分板
EN

Stack Overflow用户
提问于 2012-03-06 09:20:40
回答 3查看 816关注 0票数 0

我有一个游戏,每个玩家都有一个分数。我想有一个全球记分板,玩家可以比较他们的分数,看看他们有多好,并浏览记分板。

不幸的是,我找不到一种有效的方法来编程:将当前球员的位置存储在记分板中意味着当球员提高得分时,我必须更新记分板的很大一部分,而不存储位置意味着每次我需要它时都必须重新计算它(这也需要大量的计算)。

这个问题有没有更好的解决方案?或者,上面的解决方案之一是否“足够好”,可以实际用于大量用户和大量更新?

EN

回答 3

Stack Overflow用户

发布于 2012-03-06 10:05:28

ORDER BY子句就是为此而创建的,看起来并不是那么慢。

票数 0
EN

Stack Overflow用户

发布于 2012-03-06 10:09:46

为了便于实现,我会考虑使用第二种解决方案。根据您项目的规模,您应该能够使用ORDER_BY来订购您的解决方案。

至于这是否“足够好”,这可能在很大程度上取决于你的需求。在最坏的情况下,每次执行更新时对数据进行排序可能代价很高,但如果您发现ORDER_BY速度很慢,则可能需要考虑重写。

问自己最好的问题是,哪个操作会执行得更多?如果你很少写作,而经常阅读,也许排序会是一个好主意。就目前情况而言,我建议使用ORDER_BY。

就实现位置而言,有没有理由将其放在数据模型中,而不在输出中跟踪它?在输出行时编写计数器似乎非常容易,而且比将其存储在表中的麻烦要少得多。

如果您想对请求执行此操作,在this SO question上似乎有一个使用存储过程的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2012-03-06 12:09:39

我想我终于找到了一个解决方案,它不需要在每次分数更新时重新计算整个记分板。基本上,在伪SQL代码中:

代码语言:javascript
复制
max_rank = SELECT MIN(rank) FROM scoreboard WHERE score <= $new_score AND score >= $old_score
UPDATE scoreboard SET rank = rank + 1 WHERE score < $new_score AND score >= $old_score
UPDATE scoreboard SET rank = $max_rank, score = $new_score WHERE player = $player

排名只针对旧分数和新分数之间的玩家进行更新(仍然可以很多,但不像重新计算整个记分板的“天真”解决方案那样多。SQL数据库处理大部分工作:所有的秩更新都在一个查询中完成。

我将使用这个,除非有人发现它有问题:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9576578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档