php - 获取并更新表中所有行的列

标签 php mysql

我正在开发一个游戏,我希望有一个脚本每分钟运行一次(我猜是在 cron 作业的帮助下)。

因此,我想要运行的脚本获取角色的最大生命值(来自数据库表中的列),计算得到该值的 10%,然后将这 10% 添加到角色的当前生命值(即表中的另一列)。然后我想对数据库表中的所有行进行迭代。

例如考虑下表:

charname      current_hp      max_hp
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
player1               20          30
player2               15          64
player3               38          38

运行脚本后,我希望表格如下所示:

charname      current_hp      max_hp
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
player1               23          30
player2               21          64
player3               38          38

所以,我知道如何在技术上实现这一点,例如

$characters = $db->getCharacterList();

foreach ($characters as $character) {
    $maxHp = $character['max_hp'];
    $curHp = $character['current_hp'];
    $hpToAdd = $maxHp / 10;

    if (($curHp + $hpToAdd) >= $maxHp) {
        $db->update('characters', $character['id'], array(
            'current_hp' => $maxHp
        ));
    } else {
        $db->update('characters', $character['id'], array(
            'current_hp' => ($curHp + $hpToAdd)
        ));
    }
}

我唯一的问题是:上面发布的解决方案是实现此目的的有效方法吗?这是否适用于具有 10 000 行的表,或者是否会花费太长时间?

提前致谢。

最佳答案

您使用的是 SQL 数据库吗?如果您有 10,000 行,您的解决方案将访问数据库 10,000 次。像这样的 SQL 语句只会命中一个数据库:

UPDATE characters
SET current_hp = LEAST(max_hp, current_hp + (max_hp / 10))

数据库仍然需要执行更新所有 10,000 行所需的 I/O,但它会比数千个单独查询更有效。

关于php - 获取并更新表中所有行的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218486/

相关文章:

PHP、MySQL 日期计算

Java 代码未从 mysql 返回正确的表

php - 每个模型,相似的代码 - 更好的方法? (CakePHP)

php - while循环if语句NULL问题

php - 如何简化一个键不直接映射到 id 的复杂多对多关系?

php - 将 CSV 文件中的值放入 PHP 变量中?

mysql - 使用 Angular、Node 和 mysql 实现 WebSockets

php - 如何从链接将 mysql 单元更新为 null

php - 如何在 for 循环中不重复随机数?

php - 使用可选的列匹配连接 2 个表