2

熟悉 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的人都知道这是一个解决方案吗?提前致谢。

4

3 回答 3

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。

于 2011-07-01T14:04:00.757 回答
1

您可以使用 mysqli 库,它允许在一个查询中使用多个查询

mysqli->multiple_query( string $querys);

http://us.php.net/mysqli_multi_query

于 2009-03-01T13:50:58.503 回答
0

出门在外,怎么样...

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

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

于 2009-03-01T13:56:43.887 回答