不使用PHP或任何东西。有没有办法做到这样的事情:纯mySQL增量循环?
UPDATE myTable SET var1 = var1 + 1 IF var1 < 5 ELSE var1 = 0 WHERE [WHERE clause]
从来没有真正做过任何IF mySQL的东西,所以有点不确定?
所以结果将是可变永远不会高于5和递增当在5如果其复位为0。
TIA
不使用PHP或任何东西。有没有办法做到这样的事情:纯mySQL增量循环?
UPDATE myTable SET var1 = var1 + 1 IF var1 < 5 ELSE var1 = 0 WHERE [WHERE clause]
从来没有真正做过任何IF mySQL的东西,所以有点不确定?
所以结果将是可变永远不会高于5和递增当在5如果其复位为0。
TIA
要么使用IF()
UPDATE MyTable SET var1 = IF(var1 < 5, var1 + 1, 0) WHERE id = 1;
或在这种情况下,更简单,只需使用modulo operator
UPDATE MyTable SET var1 = (var1 + 1) MOD 6 WHERE id = 1;
编辑:是的,我知道,如果范围开始的0..5外后一个将不起作用,我只是想知道将数字保持在0和5之间的含义。如果我错了,请保持第一个:)
您可以用if()
功能做到这一点:
UPDATE myTable SET var1 = if(var1 < 5, var1 + 1, 0) WHERE [WHERE clause]
试试这个:
UPDATE myTable SET var1 = IF(var1 < 5, var1 + 1, 0) WHERE ...
http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if
另一种可能性是有两个更新语句:
UPDATE myTable SET var1 = var1 + 1 WHERE [WHERE clause] AND var1 < 5;
UPDATE myTable SET var1 = 0 WHERE [WHERE clause] AND var1 > 5
请注意,我在我的第二个例子中使用的var1>5
代替var1>=5
,因为第一个语句前值为4
列将已经被更新,以5
,我们不希望这些重置为零。
嘿!感谢您的downvote,我现在看到我的错...... – knittl 2012-03-04 17:35:51
的模伎俩是好的,但是当有负数会失败;) – knittl 2012-03-04 17:39:29
会发生什么,然后VAR1超过6,再次将数据设置为1,2, 3,4,5,0,1,2,4,5, – Starx 2012-03-04 17:40:02
@knittl是的,我意识到,写它后,却让它呆在那里,因为我觉得目的是为了保持0 :) – 2012-03-04 17:42:03