Php mysql根据分数和最短时间获得用户排名

Php mysql根据分数和最短时间获得用户排名,php,mysql,Php,Mysql,我有这样的桌子: +-------------+---------------------+---------------------+--------+ | id | name | start_time | end_time | score | +-------------+---------------------+---------------------+--------+ | 1 | Jon | 2017-10-19 01:00:0

我有这样的桌子:

+-------------+---------------------+---------------------+--------+
| id  | name  |       start_time    |        end_time     | score  |
+-------------+---------------------+---------------------+--------+
| 1   | Jon   | 2017-10-19 01:00:00 | 2017-10-19 01:20:00 |  20    |
| 2   | Jane  | 2017-10-19 01:15:00 | 2017-10-19 01:30:00 |  20    |
| 3   | Fred  | 2017-10-19 01:00:25 | 2017-10-19 03:10:35 |  80    |
| 4   | July  | 2017-10-19 01:12:28 | 2017-10-19 01:16:35 |  10    |
+-------------+---------------------+---------------------+--------+
我想要这个:

+-------------+---------------------+---------------------+--------+-------+
| id  | name  |       start_time    |        end_time     | score  |  rank |
+-------------+---------------------+---------------------+--------+-------+
| 3   | Fred  | 2017-10-19 01:00:25 | 2017-10-19 03:10:35 |  80    |   1   |
| 2   | Jane  | 2017-10-19 01:15:00 | 2017-10-19 01:30:00 |  20    |   2   |
| 1   | Jon   | 2017-10-19 01:00:00 | 2017-10-19 01:20:00 |  20    |   3   |
| 4   | July  | 2017-10-19 01:12:28 | 2017-10-19 01:16:35 |  10    |   4   |
+-------------+---------------------+---------------------+--------+-------+
基本上,我要按分数排序。如果分数相等,则按最低持续时间时间排序。 这与仅按分数排序不同,它还应计算从开始时间到结束时间的持续时间

  • 我们可以使用用户变量来模拟行数,从而给我们一个排名
  • 要获得持续时间差,只需减去时间。结束-开始
  • 然后我们可以按分数递减和持续时间递增进行排序

  • 那么身份证就不会变了。但这只是一个
    SELECT*FROM TBL order by score desc,end_time asc
    这是什么rdbms和版本?如果你想要一个“排名”列,那么在mySQL和SQL Server之间的实现会有所不同。我固定了id,你不能只说结束时间asc,因为你可以看到“JANE”有更高的结束时间,但结果是15分钟,“JON”时间是20分钟mySQL版本5.6继续。试着做点什么。那么你想按持续时间排序,而不是按时间减去两者?
    SELECT A.*, @RN:=@RN+1 as Rank
    FROM SO46833505_TBL  A
    CROSS JOIN  (Select @RN:=0) Z
    ORDER BY  score desc, end_time-Start_Time asc;