gpt4 book ai didi

mysql - 在 mysql 查询上寻找更好的方法来确定查询的排名

转载 作者:行者123 更新时间:2023-11-30 00:28:04 24 4
gpt4 key购买 nike

我正在重新设计一年前为计时器制作的 mysql 数据库。为了提供一些背景知识,它是一个赛车模组的计时器,其中包含多个 map ,每个 map 内都有多个阶段。这是运行查询的表的假设示例

SELECT SELECT *
FROM `records`
WHERE mapid = 3
AND stage = 1
ORDER BY TIME, DATE;

Records
-------------------------------------------------------------------
runId|userId |mapId|stage| time | date
3245 | 570 | 3 | 1 | 22.559|5/6/2013
4246 | 59 | 3 | 1 | 22.603|1/2/2014
1752 | 12 | 3 | 1 | 22.612|3/3/2013
1952 | 991 | 3 | 1 | 22.612|3/4/2013
1969 | 13 | 3 | 1 | 22.612|3/8/2013
4569 | 915 | 3 | 1 | 22.620|3/9/2014
-------------------------------------------------------------------

我想要实现的是能够确定该特定类(class)阶段的用户排名,这有点困难。我一直在使用的旧方法只是选择小于或等于用户时间的次数,但是当时间完全相等时,这种方法就不再可靠了(这非常常见。)我想到的唯一解决方案是远正在创建一个排名列,并使用存储过程,并且仅使用游标进行查询来生成上面的表以通过增量分配排名,然后从那里选择排名,但这似乎有点太最后了,我正在努力避免这种情况。那么,关于如何解决这个问题有什么解决方案/想法吗?谢谢。

(此外,如果时间相等,我希望较新的时间排名低于较旧的时间。这样做的原因是前 10 名有一个积分系统,并且多次相同的排名会扭曲系统。另外较旧的时间通常比相同值的较新时间更令人印象深刻)

或者通过示例使问题更清楚,我如何确定上表中的 runID 1952 是第四个结果,而不是第三个或第五个结果。

最佳答案

将排名变量设置为零,并为每行将其增加 1,就像创建索引一样:

SET @rank := 0;

SELECT *, @rank := @rank + 1 `rank`
FROM records
WHERE mapid = 3
AND stage = 1
ORDER BY time, date;

关于mysql - 在 mysql 查询上寻找更好的方法来确定查询的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22721352/

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