mysql - 在更新中使用逻辑并使用尽可能少的查询返回更新的字段

标签 mysql

我正在服务器上用 javascript 编写一个视频游戏,该游戏将信息保存在 mysql 数据库中,并且我试图将我的第一个效果附加到简单的治疗药水项目上。为了实现该效果,我使用pell_id调用拼写表,它获得一个名为effect的字段,其中包含要在我的服务器上执行的代码。我使用 eval() 函数来执行字符串中的代码。为了优化游戏,我想运行尽可能少的查询。对于这个例子(我认为答案将帮助我评估其他类似的效果)我想更新“玩家”表,其中包含像“健康”这样的统计列,然后我希望它添加n,这将是一个递减的数字15,然后250 毫秒后添加 14,然后添加 13,直到 n=1,净效应是生命值大幅跃升,然后越来越小,如果玩家的生命值达到允许的最大限制,则效果将立即停止,实现这一点相对容易...... 但我想为每次增加执行一个更新语句,而不是每 250 毫秒进行一次选择和更新,以检查健康状况是否 > max_health 并确保玩家的健康状况不会超过其最大健康状况。因此,稍微离题一下,我想要一个给出此数据的更新

player_id   health   max_health
=========   ======   ==========
1           90       100

除非 (max_health-health) < 15,否则生命值将增加 15...在这种情况下,它应该只增加 10。

更简单的解决方案可能是 如果我可以在每次更新后返回生命值和最大生命值我更新它我不介意做最后的 伪代码 如果健康状况 > max_health 更新健康状况设置健康状况=最大健康状况

因此,如果有人可以解释如何在更新后返回字段,那将会有所帮助。 或者,如果有人可以展示如何在更新中使用逻辑,这也会有所帮助。

另外,如果我没有提供足够的信息,我很抱歉,我很乐意提供更多信息,我只是不想让问题变得难以理解。

最佳答案

update health
set health = least(max_health, health +<potion effect>)
where player_id = ...

编辑

对于您的其他问题:通常,我认为更新会返回受影响的行数。因此,如果您尝试在 health 已经 = max_health 时更新 health,它应该返回 0。

例如,我知道如何在 php 中执行此操作,但只是说您在哪里使用 javascript...那么?

http://dev.mysql.com/doc/refman/5.6/en/update.html

UPDATE returns the number of rows that were actually changed. The mysql_info() C API function returns the number of rows that were matched and updated and the number of warnings that occurred during the UPDATE.

关于mysql - 在更新中使用逻辑并使用尽可能少的查询返回更新的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264901/

相关文章:

PHP、JSON 和 MySQL

php - 插入 8 个随机字符的唯一字符串

mysql - 将转储导入到 Amazon RDS

mysql - UNION ALL 对最终结果进行排序

Mysql union、left join、group和count

php - php 程序的 jsp 版本

php - 将 html-php comboBox 与数据库同步

php - 高效的mysql查询产品目录

MySQL 在另一个查询中使用一个查询的结果

php - 更新表时跟踪选择和取消选择选项