我嘗試使用,如果它顯示在下面 你會得到知道我想要做的有點複雜Mysql的更新
UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1)
WHERE thread_id= :thread_id
我想更新u1_delete在U1的用戶名,否則它會更新u2_delete場
更新我嘗試使用,如果它顯示在下面 你會得到知道我想要做的有點複雜Mysql的更新
UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1)
WHERE thread_id= :thread_id
我想更新u1_delete在U1的用戶名,否則它會更新u2_delete場
更新您可以使用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
在更新中使用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
我想這是你想要什麼:
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設置爲自己並且不會更改。
這是你想要的嗎?