请教一个 MySQL 排序问题

2021-06-19 16:00:37 +08:00
 KasuganoSoras

场景:在做一个小游戏排行榜,参加比赛用时最短,且游戏分数最高的玩家排名靠前

现在在想怎么排序,目前能想到的办法是用一个固定时间,减去比赛用时,然后将得出的结果加上游戏分数,再以此排序,不过我 SQL 水平有限,不知道应该怎么写,有大佬可以指点一下吗?谢谢

2043 次点击
所在节点    MySQL
8 条回复
yitingbai
2021-06-19 16:28:20 +08:00
你描述的太矛盾了,时间最短和分数最高, 这两个维度到底以哪个为准呢?到底是竞速游戏还是积分游戏?
wpblank
2021-06-19 16:46:05 +08:00
这两项总得有一个权重吧?多弄一列保存他们的加权总分。
如果没权重单纯是时间优先的话,比如用时 1S,100 积分 排在 用时 2S,100 万积分的前面,那么直接 GROUP BY 用时,积分就行?
wpblank
2021-06-19 16:48:00 +08:00
@wpblank 打错了 ORDER BY
KasuganoSoras
2021-06-19 16:48:56 +08:00
@yitingbai 是一个赛车游戏,准确来说是漂移。游戏里车辆漂移的角度越大,得分越高,但是角度大了速度就慢,所以玩家需要在速度和角度之间找到一个平衡,能够做到速度不会太慢的同时分数高的人排名就高

上面说的这个思路应该是差不多对的,但是不知道怎么用 SQL 去实现。
yitingbai
2021-06-19 17:04:00 +08:00
@KasuganoSoras 楼上说的很对啊, 把时间换算成分数, 再 ORDER BY 分数
thunderw
2021-06-19 17:04:12 +08:00
不太慢是多慢?
你这个问题就不是会不会 SQL 的问题,而是根本就没想好算法的问题。
你的分数能够量化成数学公式吗?或者你举几个例子,具体的数字,你看能举出来不?
具体数据量化你能想清楚的话,写 SQL 也就是分分钟的事。
KasuganoSoras
2021-06-19 17:10:10 +08:00
@thunderw 谢谢,确实是没想好,我重新想一下应该怎么做规则,谢谢大家了。
yiplee
2021-06-24 11:04:06 +08:00
赛车游戏应该谁最先通过终点谁就赢。为了鼓励漂移可以学习马里奥赛车,漂移之后有氮气加速效果,抵消漂移带来的降速效果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX