Mysql选择值然后更新

时间:2013-04-20 08:57:52

标签: php mysql sql mysqli

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

所以我想做类似的事情,但我似乎无法让它发挥作用:

UPDATE `gan` SET `turn` = (SELECT `turn` FROM `gan` WHERE `gan_id`='$gan_id') + 1

我还没想出如何检查值是否为10以将其重置为0;

所以我需要发生的事情,在我的php mysql查询中,我传入的gan_id返回当前的转弯,并在返回值后递增它。

我已经尝试过运行两个单独的查询,但我遇到了多个用户获得相同回合的问题。

3 个答案:

答案 0 :(得分:2)

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");

没有?如果你想处理并发,你需要选择FOR UPDATE。

答案 1 :(得分:0)

尝试此查询:

UPDATE `gan` SET `turn` =(SELECT MAX(`turn`) FROM `gan` WHERE `gan_id`='$gan_id')+ 1)

这会增加值。

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

答案 2 :(得分:0)

使用CASE expression

UPDATE gan
SET    turn = CASE turn WHEN 10 THEN 0 ELSE turn + 1 END
WHERE  gan_id = ?

IF() function

UPDATE gan SET turn = IF(turn<10, turn+1, 0) WHERE gan_id = ?