小复杂的Mysql更新

时间:2012-10-16 17:18:20

标签: mysql

我正在尝试使用if更新如下所示 你会明白我想做什么

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

我希望在u1是用户名时更新u1_delete,否则它会更新u2_delete字段

3 个答案:

答案 0 :(得分:1)

在更新中使用CASE。诀窍是在u1_delete时更新:username = u1,然后将其设置为当前值,使其不会变为NULL,如果{{1} u2_delete则执行相同操作}},它涵盖了:username <> u1的“其他”情况。

IF()

答案 1 :(得分: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

答案 2 :(得分: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将设置为自身且不会更改。

这是你想要的吗?