MySQL-列出对话
就像我们在流行的消息传递系统中所做的那样 我想显示当前用户与其他用户的对话列表、包含已发送和已接收消息的对话、仅显示每个对话的最新消息以及顶部的最新对话 在下面的SQL语句中: 二进制字段MySQL-列出对话,mysql,Mysql,就像我们在流行的消息传递系统中所做的那样 我想显示当前用户与其他用户的对话列表、包含已发送和已接收消息的对话、仅显示每个对话的最新消息以及顶部的最新对话 在下面的SQL语句中: 二进制字段read=1表示接收方已读取消息。如果当前用户没有阅读他收到的某些消息,那么当前用户会将整个对话显示为未读。但是当前用户不应该知道其他人是否读过当前用户发送的消息。二进制字段delto=1表示接收方删除了该消息,发送方仍将保留该消息;类似于delfrom。与users表联接以获取用户名 假设当前用户的id为2。
read
=1表示接收方已读取消息。如果当前用户没有阅读他收到的某些消息,那么当前用户会将整个对话显示为未读。但是当前用户不应该知道其他人是否读过当前用户发送的消息。二进制字段delto
=1表示接收方删除了该消息,发送方仍将保留该消息;类似于delfrom
。与users表联接以获取用户名
假设当前用户的id为2。我想要这样的东西:
选择userid
、name
、最新的对话消息、最新对话消息的时间戳、位u和(如果(to
=2,read
,b'1'))作为read
frommessages
加入(to
=2和delto
=b'0'和from
=userid>)或(from
=2和delfrom
=b'0'和to
=userid
)按userid
按最大顺序分组(mesid
)描述
相关字段,但您可以忽略:
create table `users`(
`userid` mediumint unsigned not null auto_increment primary key,
`name` tinytext not null
);
create table `messages`(
`messid` int unsigned not null auto_increment primary key,
`from` mediumint unsigned not null,
`to` mediumint unsigned not null,
`message` text not null,
`time` datetime default CURRENT_TIMESTAMP,
`read` bit(1) not null default b'0',
`delfrom` bit(1) not null default b'0',
`delto` bit(1) not null default b'0'
);
我找到了一个解决方案。因为我在聚合
消息
和时间
时遇到问题,所以我将它们放在select查询之外。嗯,时间
可以聚合为max(时间
),但为什么在max(梅西德
)已经在聚合消息时这样做呢。因此,我找到了一个解决方案:
选择userid
,name
,message
,time
,conversations
readfrom(选择max(mesid
)作为mmid
,userid
,name
,bit_和(如果(to
=2,read
,b'1'))作为<代码>阅读<代码>信息<代码>加入<代码>用户<代码>打开(<代码>至<代码>=2和<代码>至<代码>=b'0'和<代码>至<代码>=b'0'和<代码>至<代码>用户ID<代码>按<代码>用户ID<代码>顺序作为对话
加入消息
onmesid
=mmid
Sooo…你发布的“类似于此”的代码有什么问题?@IanKemp如何在该代码中实现/获取“最新对话消息”。