一尘不染

MySQL更新语句存储排名位置

mysql

我正在设法解决一个查询问题,但我只是想不通。如果有人给我一个指针,我将不胜感激。作为我要实现的目标的简单示例,我在数据库中有这些记录

Score|Ranking
-------------
100  |0
200  |0
300  |0

我希望“排名”字段根据得分最高的人包含1,2,3,因此结果应为:

Score|Ranking
-------------
100  |3
200  |2
300  |1

目前,我正在为所有这些记录做一个for next循环,但是鉴于现实情况可能是几千个-可能要花很长时间!有没有人对魔术查询有一个想法,可以一口气做到这一点?


阅读 221

收藏
2020-05-17

共1个答案

一尘不染

在MySQL中,您可以 使用row_number

这是在中使用它的示例SELECT

select @rownum:=@rownum+1 ‘rank’, p.* 
from player p, (SELECT @rownum:=0) r 
order by score desc;

如果INSERT INTO使用SELECT这样的话,您将获得排名。

2020-05-17