Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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_Sql_Database_Database Schema - Fatal编程技术网

Mysql 用户之间的消息传递模式

Mysql 用户之间的消息传递模式,mysql,sql,database,database-schema,Mysql,Sql,Database,Database Schema,有用户。每个用户可以有多个属性。如果该属性不是用户自己的属性,用户可以从该属性的页面启动与该属性所有者的对话 我有以下表格: 用户表 id integer username varchar .... 属性表 id integer user_id integer .... 消息表 id integer sender integer fk receiver integer fk property_id integer fk message varchar created_at tim

有用户。每个用户可以有多个属性。如果该属性不是用户自己的属性,用户可以从该属性的页面启动与该属性所有者的对话

我有以下表格:

用户表

id integer
username varchar
....
属性表

id integer
user_id integer
....
消息表

 id integer
 sender integer fk
 receiver integer fk
 property_id integer fk
 message varchar
 created_at timestamp
我提出了上面提到的消息表来存储对话。当用户登录时,他/她可以看到所有对话,但只能看到每个对话的最后一条消息,并且可以进一步扩展以完全查看对话

所以,要获取当前用户的所有对话,我必须从消息表中选择所有内容,其中发送方或接收方是当前用户,并按属性\u id对它们进行分组,因为我需要用属性\u id分隔的对话

例如,2个用户可以就每个属性进行2次单独的对话,实际上他们甚至不需要知道他们在每种情况下都在与同一个人交谈。重要的是谈话是关于财产的

我提出了以下SQL mysql来获取当前用户的所有对话,但我不认为这是最佳方法,而且从性能角度来看,这种方法也不能很好地扩展

挑选* 从`消息` 'id'在哪里 选择MAX`id` 从`消息` 其中`sender`=@current\u用户或`receiver`=@current\u用户 按CONCAT`sender`+`receiver`、`property\u id分组` 有什么更好的建议吗

另外,在不向等式中添加另一个表的情况下,建议可以基于这样一个事实,即属性id始终属于一个不同的用户,尽管我无法想出使用它的方法

编辑1 MAXid在这里可靠吗?是否仍要通过创建_at来订购,以获取每次对话的最新消息


编辑2:考虑到基于发送者、接收者和属性id的对话是唯一的,发送者或接收者是当前用户。

你真的在MAXcreated时间戳中寻找整数id吗?@jarlh我的错,我编辑了我的问题以反映我的需要。还更正了查询。您真的在MAXcreated_at的时间戳中查找整数id吗?@jarlh我的错,我编辑了我的问题以反映我需要的内容。还更正了查询。