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

したがって、rank 列を使用して、league_id でグループ化されたポイント数に基づいてランクを格納します。これは冗長に思えるかもしれませんが、私の目的のためには必要です (これはファンタジー スポーツの Web サイト用であり、ランク列を持つことで多くの PHP コードが大幅に簡素化され、スクリプト全体で必要なクエリの数が減ります)。

私は明白な解決策を知っています - 行を反復処理し、league_id でグループ化し、ランクを 1 つずつ更新します。私が疑問に思っているのは、より効率的な解決策はありますか?

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 に答える