Mysql如果问题


Mysql If question

我正在制作一个聊天箱IM
我有一个表,如果用户关闭窗口,我想在其中更新,这意味着他已经查看了朋友发给他的消息
当这种情况发生时,每个会话都有一个唯一的id,所以我会找到具有该id的消息,并将查看的列设置为等于用户名。

但是,如果另一个用户也关闭了窗口,我想将所有消息的查看列更改为"both",这样任何一个用户都不会弹出这些消息(默认情况下,查看的列等于0)
我想要的是一个查询,它只找到带有convo_id的所有消息,如果该消息已经被另一个用户(即viewed!=0)查看,则它被设置为其他两个,它被设置为由关闭框的用户。

我有一个查询,但它不起作用,因为我没有完全理解语法。

只是想知道是否有人能纠正它或提出一些建议

$sql = "UPDATE chatbox IF (viewed!=?) THEN
        SET viewed=? WHERE convo_id=?
        ELSE 
        SET viewed=? WHERE convo_id=?";
$stmt18 = $conn->prepare($sql);
$result = $stmt18->execute(array(0,$receiver,$convo_id,'both',$convo_id));

您需要使用一个case语句:

update catbox
set viewed = case when viewed = ? THEN ? else ? end
where convo_id = ?

我建议您创建第二个表(可能称为"视图")来记录这些信息。当关闭事件发生时,在表中插入一行,其中包含消息id和用户名。

这样可以简化查询,避免在消息表中创建混淆的数据。