我正在改造我为一个计时器一年前的MySQL数据库。为了给出一些背景知识,它为赛车mod提供了一个计时器,其中包含多个地图,每个地图都有多个阶段。继承人运行表的一个假设的例子查询寻找一个更好的方法在一个MySQL查询确定排名与查询
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
-------------------------------------------------------------------
我试图做到的,是能够确定用户的排名,以了解该过程中的阶段,这是有些困难。我一直在使用的老方法是只选择小于或等于用户时间的COUNT,但是当时间完全相等时这是不可靠的(这是非常常见的)。我认为唯一的解决方案是这样的远远是创建一个列的列,并使用一个存储过程,只是使用光标查询生成上面的表通过incrimentation分配排名,并从那里选择的排名,但这似乎有点过于求助,我试图避免这种情况。那么,我可以如何解决这个问题的任何解决方案/想法?谢谢。如果时间相等,我希望新时间排在旧时间之下,推理是前十名有一个积分系统,并且多次出现相同的排名使系统倾斜。旧的时间通常更令人印象深刻,然后更新的时间相同的值)
或者通过示例使问题更清楚一点,我将如何确定上表中的runID 1952是第4个结果,而不是第三或第五。
请显示您想要的结果样本数据。当时间相等时,你想要发生什么?而且,您正在使用的查询是什么? –
对不起,有点不清楚,我举了一个例子来帮助解释我的意思。 – prmetme
在我看来,你还没有完全定义'排名'的含义。为什么在同一时间做同样事情的两个人有不同的'等级'? –