行の選択項目を0に更新する効率的な方法はありますが、IDに基づいて、MySQL:フィールドを0に設定するが、1つの行のフィールドを1に設定するすべての行を更新する
基本的には、データベースに複数のオブジェクトがあり、どちらが「不使用」であるかを切り替えたいので、クエリは行の1つ(inid = 1)をinuse = 1に設定し、残りはinuse = 0。 IDはABCDであり、そうでなければ0場合
おかげ:)
UPDATE table SET inuse=IF(id=ABCD, 1, 0)
行の選択項目を0に更新する効率的な方法はありますが、IDに基づいて、MySQL:フィールドを0に設定するが、1つの行のフィールドを1に設定するすべての行を更新する
基本的には、データベースに複数のオブジェクトがあり、どちらが「不使用」であるかを切り替えたいので、クエリは行の1つ(inid = 1)をinuse = 1に設定し、残りはinuse = 0。 IDはABCDであり、そうでなければ0場合
おかげ:)
UPDATE table SET inuse=IF(id=ABCD, 1, 0)
UPDATE `table`
SET `inuse` = (`id` = 23)
確かにINUSEフィールドに1を設定します。
UPDATE myTable
SET Field = 0
WHERE FieldID <> [WhateverID]
UPDATE myTable
SET Field = 1
WHERE FieldId = [WhateverID]
update tbl set inuse = if(test, 1, 0);
または短い
update tbl set inuse = test;
例えば
update tbl set inuse = name = 'foo';
UPDATE table
SET inuse = (id = @id)
WHERE id = @id
OR inuse
をお試しください
これにより、関連する行のみが更新されます。
フラグを設定した後で、コードの他の部分が同じオブジェクトを同時に使用しない場合は、呼び出しコードがinuse = 1と設定し、完了したときにリセットする方が良いでしょう。それ以外の場合は、オブジェクト(行)を使用中としてマークする1つのスレッドを終了し、別のスレッドが別のオブジェクトを必要とする場合、使用中の最初のスレッドをリセットします。
このケースではありません、あなただけの1のためにINUSEを設定することができ、そして他のすべてをリセットし、あなたが使用することができますしたい場合:データベースがトランザクションを使用している場合、これが最善の方法
UPDATE myTable
SET InUse = CASE
WHEN myTable.id = @id THEN 1
ELSE 0
END
です
トランザクションを使用していない場合、CASEを使用している別の回答は移植性があるため、最良のオプションです。 2つのUPDATEステートメントより多くのCPU時間が必要になります。
これも非常にエレガントです:) –
これはあなたがArtemより速く/より効率的だと思いますか? – Joel
全く同じではないにしても、ほぼ同じだと思います。 –