我正在尝试使用下面显示的 if 进行更新,您会知道我想要做什么
UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1)
WHERE thread_id= :thread_id
我想在 u1 是用户名时更新 u1_delete 否则它将更新 u2_delete 字段
我正在尝试使用下面显示的 if 进行更新,您会知道我想要做什么
UPDATE messages SET IF(u1= :username,u1_delete=1,u2_delete=1)
WHERE thread_id= :thread_id
我想在 u1 是用户名时更新 u1_delete 否则它将更新 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
在更新中使用 a 。诀窍是更新u1_delete
when:username = u1
并将其设置为当前值,使其不会变为NULL
,并对u2_delete
if执行相同操作: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 = username,您设置为 u1_deleted = 1,否则 u1_deleted 设置为自身并且不会更改。如果 u1 不等于用户名,则 u2_delete = 1,否则 u2_delete 设置为自身并且不会更改。
这是你想要的吗?