0

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

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

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

一个更简单的解决方案可能是,如果我可以在每次更新后返回健康和最大健康 我不介意做一个最终的伪代码 if health > max_health update health set health = max health

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

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

4

2 回答 2

2
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 返回实际更改的行数。mysql_info() C API 函数返回匹配和更新的行数以及 UPDATE 期间发生的警告数。

于 2012-06-29T15:50:51.177 回答
0

使用 ANSI 标准 CASE 函数,或 mysql only minimum 函数,如另一个答案

UPDATE player
SET health = CASE WHEN health + [potion] > max_health 
             THEN max_health  
             ELSE health + [potion] 
             END CASE
WHERE player_id = [player_id]
于 2012-06-29T16:04:38.863 回答