用户之间的消息传递模式

时间:2015-11-26 21:19:38

标签: 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 timestamp

我已经提出了上面提到的message表来存储对话。当用户登录时,他/她可以看到所有对话(仅来自每个对话的最后一条消息),并且可以进一步扩展以完全查看对话。

为了获得当前用户的所有会话,我必须从message表中选择senderreceiver为当前用户的所有内容,并根据需要将其分组property_idproperty_id分隔的对话。

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

我已经提出了以下SQL(mysql)来获取当前用户的所有会话,但我不认为这是最佳方式,我认为这种方法不会规模好(从绩效的角度来看)。

SELECT *
FROM `message`
WHERE `id` IN
  (SELECT MAX(`id`)
  FROM `message`
  WHERE (`sender` = @current_user OR `receiver` = @current_user)
  GROUP BY CONCAT((`sender`+`receiver`), `property_id`))

有什么建议可以做得更好吗?

P.S。没有在方程中添加另一个表,并且建议可以基于property_id总是属于一个不同用户的事实(尽管我无法想出使用它的方式)。

修改1 这里MAX(id)可靠吗?无论如何要按created_at订购以获取每个对话的最新消息?

修改2 :根据senderreceiverproperty_id senderreceiver,确定对话是唯一的成为当前用户。

0 个答案:

没有答案