gpt4 book ai didi

php - 显示消息状态: read and unread (differs from other users) in PHP/MySQL messaging system

转载 作者:行者123 更新时间:2023-11-29 07:15:46 24 4
gpt4 key购买 nike

我显示的消息状态因每个用户而异。假设 user1user2 发送一条消息,user1 的消息状态设置为 已读,而 >user2 的消息默认设置为未读。它将在 user2 点击消息后更新。

因此,在这些场景中,user1 的消息(来自收件箱)将具有灰色字体,表示该消息已设置为已读(因为user1 是发送者)。另一方面,user2 采用粗体字体,表示该消息未读

这是表的第一个结构:

message(messageid, fromid, toid, message, timestamp, status)

这里的问题是,如果我将消息状态更新为已读,则会影响另一方(user2)。因此,我添加了另一列,该列将设置与 user1user2 不同的状态:

message(messageid, fromid, toid, message, timestamp, from_status, to_status)

这里,from_status 用于 fromidto_status 用于 toid。但我在如何使用这些值来显示状态方面遇到了问题。

我在第一次尝试时使用的 PHP 代码是:

<?php 
$id = $_SESSION['id'];
$query = mysql_query("SELECT m.* FROM message m
LEFT JOIN message m2 ON (
(m.fromid=m2.fromid AND m.toid=m2.toid) OR
(m.fromid=m2.toid AND m.toid=m2.fromid)
) AND m.timestamp<m2.timestamp
WHERE (m.fromid='$id' OR m.toid='$id') AND m2.toid IS NULL ORDER BY timestamp DESC");

while ($message = mysql_fetch_array($query)) {
if ($message['status'] === 'unread') {
// bold font style will be applied
}
else {
// gray-colored font will be applied
}
}
?>

(该查询获取每个用户的每个对话以及最新对话。)

这些代码对于主用户(即 user1)工作正常,但会影响另一方,后者认为从 user2 收到的消息设置为 已读未读

因此,我在修改表上做什么时遇到了一些麻烦,每个用户都有 2 个单独的 status 。我怎样才能完成这些工作?

最佳答案

@andrewsi 评论非常好,例如当您有很多接收者时。在您的情况下,它只是一个附加字段,因此在我看来,仅使用一张表并不是一种溢出。根据您的情况,您可以通过一个简单的 sql 来完成此操作:

SELECT m.*,
CASE
WHEN m.fromid = $id THEN m.from_status
WHEN m.toid = $id THEN m.to_status
END as read_status
FROM message m
WHERE
m.fromid = $id OR m.toid = $id
ORDER BY timestamp DESC;

在您看来,您只检查了read_status字段

关于php - 显示消息状态: read and unread (differs from other users) in PHP/MySQL messaging system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com