use*_*762 11 mysql sql ranking sql-update
我正试图绕过一个查询而我无法理解它.如果有人给我指针,我将不胜感激.作为我想要实现的一个简单示例,我在数据库中有这些记录
Score|Ranking
-------------
100 |0
200 |0
300 |0
Run Code Online (Sandbox Code Playgroud)
我希望排名字段包含1,2,3根据谁获得最高分,所以结果应该是:
Score|Ranking
-------------
100 |3
200 |2
300 |1
Run Code Online (Sandbox Code Playgroud)
目前,我正在为所有这些记录做下一个循环,但实际上这可能是几千 - 这可能需要永远!有没有人对魔术查询有一个想法,可以一次性做到这一点?
qua*_*oup 18
这是一种方法:
SET @r=0;
UPDATE table SET Ranking= @r:= (@r+1) ORDER BY Score DESC;
/* use this if you just want to pull it from the db, but don't update anything */
SET @r=0;
SELECT *, @r:= (@r+1) as Ranking FROM table ORDER BY Score DESC;
Run Code Online (Sandbox Code Playgroud)
在MySQL中,您可以使用row_number.
select @rownum:=@rownum+1 ‘rank’, p.*
from player p, (SELECT @rownum:=0) r
order by score desc;
Run Code Online (Sandbox Code Playgroud)
如果您INSERT INTO使用SELECT这样的,您将获得您的排名.
这会创建一个内联更新语句,根据变量对您的玩家进行排名@rc.我在非常类似的情况下多次使用它,它运行良好并且保持在数据库端.
SET @rc = 0;
UPDATE players JOIN (SELECT @rc := @rc + 1 AS rank, id FROM players ORDER BY rank DESC)
AS order USING(id) SET players.rank = order.rank;
Run Code Online (Sandbox Code Playgroud)
id假定是您的players表的主键.
| 归档时间: |
|
| 查看次数: |
11561 次 |
| 最近记录: |