首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql选择值,然后更新

问Mysql选择值,然后更新
EN

Stack Overflow用户
提问于 2013-04-20 16:57:52
回答 3查看 1.6K关注 0票数 1

基本上,我要做的是从一个表中获取一个turn id,但是在返回值之后,它需要递增1,在递增10次之后,它重置为0;

所以我想做一些类似的事情,但是我似乎不能让它工作:

代码语言:javascript
复制
UPDATE `gan` SET `turn` = (SELECT `turn` FROM `gan` WHERE `gan_id`='$gan_id') + 1

我也没有弄清楚如何检查该值是否为10以将其重置为0;

所以我需要做的是,在我的php mysql查询中,返回我传入的gan_id的当前轮,并在返回值之后递增它。

我尝试运行两个独立的查询,但遇到了多个用户得到相同结果的问题。

EN

回答 3

Stack Overflow用户

发布于 2013-04-20 17:16:29

代码语言:javascript
复制
mysql_query("SET AUTOCOMMIT = 0");
mysql_query("START TRANSACTION");
$result = mysql_query("SELECT turn FROM gan WHERE gan_id = $gan_id FOR UPDATE");
$turn = mysql_fetch_array($result);
$someNewVal = $turn == 10 ? 0 : $turn + 1;
$resUpdate = mysql_query("UPDATE gan SET turn = $someNewVal WHERE gan_id = $gan_id");
mysql_query("SET AUTOCOMMIT = 1");
mysql_query("COMMIT");

不是吗?如果你想处理并发,你需要select FOR UPDATE。

票数 2
EN

Stack Overflow用户

发布于 2013-04-20 17:06:11

尝试此查询:

代码语言:javascript
复制
UPDATE `gan` SET `turn` =(SELECT MAX(`turn`) FROM `gan` WHERE `gan_id`='$gan_id')+ 1)

这将递增该值。

要检查该值并将其重置为0,必须先锁定表,然后再执行任务

票数 0
EN

Stack Overflow用户

发布于 2013-04-20 17:28:48

使用CASE expression

代码语言:javascript
复制
UPDATE gan
SET    turn = CASE turn WHEN 10 THEN 0 ELSE turn + 1 END
WHERE  gan_id = ?

或者是IF() function

代码语言:javascript
复制
UPDATE gan SET turn = IF(turn<10, turn+1, 0) WHERE gan_id = ?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16118501

复制
相关文章

相似问题

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