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我的错,我编辑了我的问题以反映我需要的内容。还更正了查询。