2

我有一个这样的 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 分组并一一更新排名。我想知道的是,有没有更有效的解决方案?

4

1 回答 1

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;
于 2013-03-10T17:18:26.143 回答