每次添加新行时更新列表

时间:2018-10-01 17:36:45

标签: php mysql

我正在使用PHP将数据插入数据库。我有一张叫做游戏的桌子,它是这样定义的:

ID  |  Score  |  Rank

我希望每次添加新行时都会更新等级列。排名列必须按得分对游戏进行排序。

例如:

ID  |  Score  |  Rank
1   |    5    |   2
2   |    9    |   1

当我添加新行(ID = 3,分数= 15)时,我的表将如下所示:

ID  |  Score  |  Rank
1   |    5    |   3
2   |    9    |   2
3   |   15    |   1

我已经在PHP中尝试过此方法,但是它似乎不起作用:

try {
   $bdd->exec("INSERT INTO games(score) VALUES('$score')");
} catch (Exception $e) {
   die ($e->getMessage());
}

try {
       $bdd->exec("UPDATE games set rank=(SELECT @curRank := @curRank + 1 
       AS rank FROM games g, (SELECT @curRank := 0) r
       ORDER BY  score;)");
    } catch (Exception $e) {
       die ($e->getMessage());
    }

任何想法都可以通过PHP完成吗?还是有一种方法可以将列值默认设置为分数的等级?

1 个答案:

答案 0 :(得分:0)

try {
   $bdd->exec("SET @pos := 0;
   UPDATE games SET rank= ( SELECT @pos := @pos + 1 ) ORDER BY score DESC;)");
} catch (Exception $e) {
   die ($e->getMessage());
}

这对我有用。还是谢谢。