2

PHP の mysql_query コマンドに精通している人なら誰でも、1 回の呼び出しで (; 区切り記号で区切られた) 複数のクエリを実行できないことを知っています...

私の問題は、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場合は の値を返します。

したがって、最初の行は設定されておらず、次の行にはすでに値があり、各行に +1 が追加@t1されているため更新されます。order = (@t1 := 0 + 1)@t1

于 2011-07-01T14:04:00.757 に答える
1

mysqli ライブラリを使用できます。これにより、1 つのクエリで複数のクエリを実行できます。

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 に答える