2012-10-16 64 views
1

我嘗試使用,如果它顯示在下面 你會得到知道我想要做的有點複雜Mysql的更新

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

我想更新u1_delete在U1的用戶名,否則它會更新u2_delete場

更新

回答

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 
1

在更新中使用CASE。關鍵是要更新u1_delete:username = u1否則將其設置爲當前值,因此它不會成爲NULL,並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 
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 =用戶名,你設置到u1_deleted = 1,否則u1_deleted設置爲自己並且不會改變。 如果u1不等於用戶名,那麼u2_delete = 1,否則u2_delete設置爲自己並且不會更改。

這是你想要的嗎?