[英]MySQL: update a field only if condition is met
是否可以在 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
另一種變體:
UPDATE test
SET field = IF ( {condition}, {new value}, field )
WHERE id = 123
僅當滿足{condition}
才會使用{new value}
更新field
我們可以使用 MySQL IF()
條件函數的另一種解決方案:
UPDATE test
SET field = IF(something == 1{CONDITION}, 1 {NEW VALUE}, field)
WHERE `id` = 5
找到了 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";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.