熟悉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的人都会看到解决方案吗? 提前谢谢。
答案 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);
答案 2 :(得分:0)
走出困境,怎么样......
... `order` = (SELECT `order`+1 FROM `mytable` ORDER BY `order` DESC LIMIT 1)
或类似的东西作为子查询?...我不确定子查询是否在每次更新后重新运行,但如果确实如此,它应该选择先前最高的order
值并递增它?