首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在mysql查询上寻找一种更好的方法来确定查询的级别

在mysql查询上寻找一种更好的方法来确定查询的级别
EN

Stack Overflow用户
提问于 2014-03-28 11:17:00
回答 2查看 55关注 0票数 0

我正在重新处理一年前为定时器创建的mysql数据库。为了给一些背景,它是一个计时器的赛车模式,其中包含多个地图,有多个阶段,在每个地图。下面是一个运行查询的表的假设示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
-------------------------------------------------------------------

我想要实现的是能够在特定的课程中确定用户的排名,这有点困难。我一直使用的旧方法只是选择少于或等于用户时间的次数,但是,当时间完全相等时,这就不再是可靠的了(这是非常普遍的)。到目前为止,我想出的唯一解决方案是创建一个秩列,并使用一个存储过程,只需要使用一个游标来生成上面的表,通过输入来分配级别,并从其中选择级别,但这似乎有点太晚了,我试图避免这种情况。那么,对于我如何处理这个问题,有什么解决方案/想法吗?谢谢。

(同样,如果时间是相等的,我希望更新的时间被排在旧的时间之下。这样做的理由是,前10名有一个积分系统,而同一等级多次使系统倾斜。同样,较老的时间通常比价值相同的较新的时间更令人印象深刻)

或者让这个问题更清晰一些,我如何确定上面提到的1952年的runID是第四个结果,而不是第三个或第五个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-28 11:36:42

将秩变量设置为零,并为每行增加1,就好像要创建索引一样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET @rank := 0;

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

Stack Overflow用户

发布于 2014-03-28 12:16:04

你可以试试这样的方法:

从记录中选择runId、userId、mapId、stage、time、date (从记录r2中选择count(不同时间)+1,其中r2时间< r1.time)作为记录中的等级,按等级、日期排列r1顺序

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

https://stackoverflow.com/questions/22721352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文