Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-列出对话_Mysql - Fatal编程技术网

MySQL-列出对话

MySQL-列出对话,mysql,Mysql,就像我们在流行的消息传递系统中所做的那样 我想显示当前用户与其他用户的对话列表、包含已发送和已接收消息的对话、仅显示每个对话的最新消息以及顶部的最新对话 在下面的SQL语句中: 二进制字段read=1表示接收方已读取消息。如果当前用户没有阅读他收到的某些消息,那么当前用户会将整个对话显示为未读。但是当前用户不应该知道其他人是否读过当前用户发送的消息。二进制字段delto=1表示接收方删除了该消息,发送方仍将保留该消息;类似于delfrom。与users表联接以获取用户名 假设当前用户的id为2。

就像我们在流行的消息传递系统中所做的那样

我想显示当前用户与其他用户的对话列表、包含已发送和已接收消息的对话、仅显示每个对话的最新消息以及顶部的最新对话

在下面的SQL语句中: 二进制字段
read
=1表示接收方已读取消息。如果当前用户没有阅读他收到的某些消息,那么当前用户会将整个对话显示为未读。但是当前用户不应该知道其他人是否读过当前用户发送的消息。二进制字段
delto
=1表示接收方删除了该消息,发送方仍将保留该消息;类似于
delfrom
。与users表联接以获取用户名

假设当前用户的id为2。我想要这样的东西:

选择
userid
name
、最新的对话消息、最新对话消息的时间戳、位u和(如果(
to
=2,
read
,b'1'))作为
read
from
messages
加入(
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<代码>顺序作为
对话
加入
消息
on
mesid
=
mmid


Sooo…你发布的“类似于此”的代码有什么问题?@IanKemp如何在该代码中实现/获取“最新对话消息”。