1

私は以下に示されている場合を使用して更新しようとしていますあなたは私が何をしたいのかがわかります

UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1) 
WHERE thread_id= :thread_id

u1がユーザー名の場合はu1_deleteを更新します。それ以外の場合は、u2_deleteフィールドを更新します。

4

3 に答える 3

1

CASEアップデートでを使用します。u1_delete秘訣は、いつ更新するか:username = u1、それ以外の場合は現在の値に設定して、がにならないようにすることです。また、の「else」の場合をカバーするifNULLについても同じことを行います。u2_delete:username <> u1IF()

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
于 2012-10-16T17:20:53.530 に答える
1

次のように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
于 2012-10-16T17:21:21.707 に答える
0

私はこれがあなたが望むものだと思います:

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はそれ自体に設定され、変更されません。

これは、あなたの望むことですか?

于 2012-10-16T17:31:12.587 に答える