在一个查询中执行UPDATE并设置用户变量

时间:2009-03-01 13:38:32

标签: php mysql user-variables

熟悉php的mysql_query命令的每个人都知道它不允许我们在一次调用中执行多个查询(以分隔符分隔)...

我的问题是我不能在我的UPDATE查询中定义一个用户变量,以便我为每一行增加它(有点像自动增量)。 它应该看起来像这样:

SET @t1=0;
UPDATE `mytable` SET `order` = (@t1:=(@t1+1)) ORDER BY `order` ASC;

我的问题是,由于我无法定义我的变量然后进行更新,我找不到在查询中设置变量的方法。 如果它是NULL,我试图定义它:

... `order` = (IFNULL( @t1 := ( @t1 + 1 ) , @t1 := 0 )) ...

但由于变量在其处理的每一行上重置,因此无效。

任何熟悉mysql的人都会看到解决方案吗? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

老问题,但无论如何这里是一个答案:

UPDATE `mytable` SET `order` = (@t1 := IFNULL(@t1, 0) + 1) ORDER BY `order` ASC;
如果IFNULL(@t1, 0)没有值,则

@t1返回0;如果值@t1,则返回@t1的值。

因此,第一行order = (@t1 := 0 + 1)未设置,并且更新为@t1,并且以下行{{1}}已经有一个值并且每行添加+1。

答案 1 :(得分:1)

您可以使用mysqli库,它允许使用

在一个查询中进行多个查询
mysqli->multiple_query( string $querys);

http://us.php.net/mysqli_multi_query

答案 2 :(得分:0)

走出困境,怎么样......

... `order` = (SELECT `order`+1 FROM `mytable` ORDER BY `order` DESC LIMIT 1)

或类似的东西作为子查询?...我不确定子查询是否在每次更新后重新运行,但如果确实如此,它应该选择先前最高的order值并递增它?