首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在更新中使用逻辑,并使用尽可能少的查询返回更新后的字段

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

Stack Overflow用户
提问于 2012-06-29 23:45:26
回答 2查看 44关注 0票数 0

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

代码语言:javascript
运行
复制
player_id   health   max_health
=========   ======   ==========
1           90       100

将使健康增加15,除非(max_ health -health) < 15...在这种情况下,它应该只添加10。

一个更简单的解决方案可能是,如果我可以在每次更新后返回健康和最大健康,如果健康> max_health更新健康,设置健康=最大健康,我不介意执行最后的伪代码

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-29 23:50:51

代码语言:javascript
运行
复制
update health
set health = least(max_health, health +<potion effect>)
where player_id = ...

编辑

对于您的另一个问题:通常,我认为update返回受影响的行数。因此,如果您试图更新健康状况,而健康状况已经是= max_health,那么它应该返回0。

例如,我知道如何在php中做到这一点,但我只是告诉你在哪里使用javascript…所以呢?

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

UPDATE返回实际更改的行数。mysql_info() C API函数返回匹配和更新的行数以及更新期间出现的警告数。

票数 2
EN

Stack Overflow用户

发布于 2012-06-30 00:04:39

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

代码语言:javascript
运行
复制
UPDATE player
SET health = CASE WHEN health + [potion] > max_health 
             THEN max_health  
             ELSE health + [potion] 
             END CASE
WHERE player_id = [player_id]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11264901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档