1

基本上我想要做的是从表中获取一个转弯ID,但是在返回值之后它需要增加1。在10个增量之后,它重置为0;

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

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

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

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

我尝试运行两个单独的查询,但我遇到了多个用户轮到同一轮的问题。

4

3 回答 3

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。

于 2013-04-20T09:16:29.120 回答
0

试试这个查询:

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

这将增加值。

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

于 2013-04-20T09:06:11.263 回答
0

使用CASE表达式

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

IF()功能

UPDATE gan SET turn = IF(turn<10, turn+1, 0) WHERE gan_id = ?
于 2013-04-20T09:28:48.313 回答