提问者:小点点

会话SQL结构(群聊)


在过去的一周里,我一直在努力想出一个对话聊天的最佳结构,在做了大量的搜索之后,并试图找到更好的答案。 到目前为止,我的当前结构是这样的:

必须能够:

  • 在组中最多有(n)个参与者。 (假设n=5)
  • 检查参与者之间是否已存在对话(这一直困扰着我..)
  • 显示最新的对话,按未读和上次留言的时间戳排序(应该有效)

显示最新的对话(按未读和时间戳排序)

SELECT * FROM chat_participants WHERE pageId = ? AND isMuted=0 ORDER BY isRead DESC, lastmod DESC

检查参与者之间是否已存在对话

客户端用户将能够向特定的最终用户发送一条新消息,或者开始一个新的群聊,最多有5个参与者。 我不是每次都开始一个新的对话,而是检查对话是否已经存在,而是将消息追加到那里。 希望说得通。 当我一直在努力想出一个好的结构时,这个特殊的特性一直困扰着我。 有没有人有一个想法,用这个结构“和平地”解决这个,或者你有更好的想法? 谢谢:)

我尝试了一些事情,比如检查页面id是否存在于具有相同聊天id的chat_participants中,但这也带来了它自己的缺点。 这是我尝试过的,但显然没有按预期工作,因为它返回(x)条记录,这些记录可能是完全不同的chatId值。

SELECT * FROM chat_participants WHERE pageId IN(<id1>,<id2>)

我很感激你在这方面的投入。 祝你有美好的一天! :)


共1个答案

匿名用户

如果您想知道特定参与者组是否存在chatid,那么一种方法就是聚合。 例如,要查找正好有1,2和3参与的聊天:

select cp.chatid
from chat_participants cp
group by cp.chatid
having group_concat(pageid order by pageid)= '1,2,3';