php - 每次添加新行时更新列表

标签 php mysql

我正在使用 PHP 将数据插入数据库。我有一个名为 games 的表,它的定义方式如下:

ID  |  Score  |  Rank

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

例如:

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

当我添加新行(ID=3,Score=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 来完成吗?或者有没有办法将列值默认设置为分数的排名?

最佳答案

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

这对我有用。不管怎样,谢谢。

关于php - 每次添加新行时更新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52596154/

相关文章:

javascript - 在没有互联网连接不可用时提供自定义通知

php - cakephp 3.x 查询中的日期时间字段比较未返回正确结果

mysql - 无法在 mysql 查询中获得左外连接结果

regex - 删除 mysql 字段中第一个 # 之前的所有内容

java - 如何在java中测试sql查询是否返回true

php - Ansible mysql_user 模块不接受加密密码

php - 从 MySQL 结果生成的 HTML 表,以使用 PHP 的形式进行处理

php - MYSQL删除语句删除太多行

php - Drupal 无法创建新用户,错误 101 或 324

php - Eloquent 下拉菜单