特定の条件が満たされた場合にのみフィールド値を更新するMySQLでUPDATEクエリを実行することは可能ですか?このようなもの:
UPDATE test
SET
CASE
WHEN true
THEN field = 1
END
WHERE id = 123
言い換えると:
UPDATE test
SET
something = 1, /*field that always gets updated*/
CASE
WHEN true
THEN field = 1 /*field that should only get updated when condition is met*/
END
WHERE id = 123
これを行う適切な方法は何ですか?
はい!
ここに別の例があります:
UPDATE prices
SET final_price= CASE
WHEN currency=1 THEN 0.81*final_price
ELSE final_price
END
これは、MySQLが行を更新しないために機能します。変更がない場合、 ドキュメントで説明されているように :
現在の値に列を設定すると、MySQLはこれを認識し、更新しません。
私の意見では、読みやすい別の解決策は次のとおりです。
UPDATE test SET something = 1, field = IF(condition is true, 1, field) WHERE id = 123
これは、条件が満たされた場合は「フィールド」を1に設定し(例として使用されるOPのように)、満たされない場合は「フィールド」の現在の値を使用します。前の値を使用することは、変更しないことと同じなので、そこに行きます。
これを試して:
UPDATE test
SET
field = 1
WHERE id = 123 and condition
MySQL IF()
条件関数を使用できる別のソリューション:
UPDATE test
SET field = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5
別のバリエーション:
UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123
{new value}
が満たされた場合にのみ、field
を{condition}
で更新します
aND条件のソリューションが見つかりました:$trainstrength = "UPDATE user_character SET strength_trains = strength_trains + 1, trained_strength = trained_strength +1, character_gold = character_gold - $gold_to_next_strength WHERE ID = $currentUser AND character_gold > $gold_to_next_strength";