我有一个像这样的MySQL表:
id | points | rank | league_id
______________________________
1 | 84 | 0 | 1
2 | 55 | 0 | 1
3 | 104 | 0 | 1
4 | 123 | 0 | 2
我想要完成的是:
id | points | rank | league_id
______________________________
1 | 84 | 2 | 1
2 | 55 | 3 | 1
3 | 104 | 1 | 1
4 | 123 | 1 | 2
所以 - 使用排名列根据点数存储排名,按照league_id分组。这似乎是多余的,但我需要它为我的目的(这是一个幻想体育网站,并有一个排名列大大简化了很多PHP代码,减少了整个脚本所需的查询数量。)
我知道明显的解决方案 - 遍历行,按照league_id进行分组并逐个更新排名。我想知道的是,有更有效的解决方案吗?
答案 0 :(得分:2)
OTOH,所以首先在丢弃的数据库上进行测试,准备加载备份:
SET @rank = 1;
SET @league = 0;
UPDATE tablename
SET
rank = @rank := IF(@league = league_id,@rank+1,1),
league_id = @league := league_id
ORDER BY league_id,points DESC;