私は以下に示されている場合を使用して更新しようとしていますあなたは私が何をしたいのかがわかります
UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1)
WHERE thread_id= :thread_id
u1がユーザー名の場合はu1_deleteを更新します。それ以外の場合は、u2_deleteフィールドを更新します。
私は以下に示されている場合を使用して更新しようとしていますあなたは私が何をしたいのかがわかります
UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1)
WHERE thread_id= :thread_id
u1がユーザー名の場合はu1_deleteを更新します。それ以外の場合は、u2_deleteフィールドを更新します。
CASE
アップデートでを使用します。u1_delete
秘訣は、いつ更新するか:username = u1
、それ以外の場合は現在の値に設定して、がにならないようにすることです。また、の「else」の場合をカバーするifNULL
についても同じことを行います。u2_delete
:username <> u1
IF()
UPDATE
message
SET
u1_delete = CASE WHEN u1 = :username THEN 1 ELSE u1_delete END,
u2_delete = CASE WHEN u1 <> :username THEN 1 ELSE u2_delete END,
WHERE thread_id = :thread_id
次のようにcaseステートメントを使用できます。
UPDATE messages
SET
u1_delete = CASE WHEN u1= :username THEN 1 ELSE u1_delete END,
u2_delete = CASE WHEN u1= :username THEN u2_delete ELSE 1 END,
WHERE
thread_id= :thread_id
私はこれがあなたが望むものだと思います:
UPDATE messages
SET
u1_delete = IF(u1 = :username, 1, u1_delete),
u2_delete = IF(u1 <> :username, 1, u2_delete)
WHERE thread_id= :thread_id;
したがって、基本的に、u1 = usernameの場合、u1_deleted = 1に設定します。それ以外の場合、u1_deletedはそれ自体に設定され、変更されません。u1がユーザー名と等しくない場合、u2_delete = 1です。それ以外の場合、u2_deleteはそれ自体に設定され、変更されません。
これは、あなたの望むことですか?