このようにIFを使用できないのはなぜですか
UPDATE my_users
IF(position2 = 18, "SET position = 17", ''),
IF(position2 = 17, "SET position = 16", ''),
IF(position2 = 16, "SET position = 15", ''),
WHERE user_id => 170 AND user_id <= 1000
機能する唯一のものは
UPDATE my_users
SET position2 = IF(position2 = 18, 17,
IF(position2 = 17, 16,
IF(position2 = 16, 15, ''
)
)
)
WHERE user_id => 170 AND user_id <= 1000
そのフィールドposition2には40以上の条件があり、この方法で迷子になりやすいため、他の方法で同じことを行う方法はありますか?
編集:
私が走れば
UPDATE my_users
SET position2 = CASE position2 WHEN 18 THEN 17
WHEN 17 THEN 16
WHEN 16 THEN 15
END
WHERE user_id => 170 AND user_id <= 1000
CASEステートメントにないものがある場合position2
、それを何も設定しません。CASEステートメントの内容以外の値を同じに保つにはどうすればよいですか
編集2: 解決策は次のとおりだと思います:
UPDATE my_users
SET position2 = CASE position2 WHEN 18 THEN 17
WHEN 17 THEN 16
WHEN 16 THEN 15
ELSE position2
END
WHERE user_id => 170 AND user_id <= 1000
編集 3: 私のリクエストが 1 回限りのものではない場合、Vatev が示唆するように、リクエストがより高速になります。
UPDATE my_users
SET position2 = CASE position2 WHEN 18 THEN 17
WHEN 17 THEN 16
WHEN 16 THEN 15
END
WHERE user_id => 170 AND user_id <= 1000
AND position2 >= 16 and <= 18