1

我正在尝试使用下面显示的 if 进行更新,您会知道我想要做什么

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 语句,如下所示:

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 回答
1

CASE在更新中使用 a 。诀窍是更新u1_deletewhen:username = u1并将其设置为当前值,使其不会变为NULL,并对u2_deleteif执行相同操作: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
于 2012-10-16T17:20:53.530 回答
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 回答