mysql - MySQL:从相互关联的 3 个或 4 个表中获取最新的未读消息
问题描述
谢谢您的帮助!我对 SQL 很陌生。感谢您通过这么长的解释与我相处。只是想确保我很详细:
我正在构建一个消息传递系统。我需要做的是按DESC
顺序检索 1 个或多个指定用户的最新未读消息。
这是我当前构建系统的方式:
Aconversation
可以在 2 个或更多用户和/或组之间创建,并且每个用户和/或组都与它相关联conversation
。中的用户/组conversation
可以相互发送messages
。
发送a 时message
,它与conversation
. 然后, 中的每个用户/组conversation
都与该新的message
.
所以为了存储所有这些,我有以下表格:
conversation
message
assoc_message__conversation
assoc_user_group__conversation
assoc_user_group__message
我有以下 db-fiddle 与我的表结构和插入其中的示例数据:
https://www.db-fiddle.com/f/s5bU15eVSxb5TDXy2GVtUS/0
如您所见,我进行了 4 个对话,每个对话有 2 条消息——“第一条消息”和“最后一条消息”。
假装我是 useru-1000001
和 group g-1000001
。您可以看到此用户和组一起在对话 1、2 和 3 中。assoc_user_group__message
通过查看表格,您还可以看到此用户和组已阅读对话 1 中的两条消息。
我需要做的是能够指定u-1000001
和/或g-1000001
,并检索指定用户和/或组所在的每个对话的最新未读消息,按最新未读消息排序DESC
(按message_id
,不是send_datetime
)。我还需要能够指定message_id
在第一个请求之前检索 X 条未读消息,或在第一个请求(message_id < 4
或message_id > 4
)之后检索 X 条新的未读消息。
我需要为每条未读消息检索以下字段:conversation_id
, message_id
, message
, send_datetime
, raw_id
, user_type
. 您可以看到这些字段跨越 4 个不同的表:message
、assoc_user_group__message
、assoc_user_group__conversation
、assoc_message__conversation
u-1000001
以下是如果我输入and g-1000001
(省略字段)应该检索的示例send_datetime
:
| conversation_id | message_id | message | raw_id | user_type |
-----------------------------------------------------------------
| 3 | 6 | Last Msg | 1000001 | user |
-----------------------------------------------------------------
| 2 | 4 | Last Msg | 1000001 | group |
-----------------------------------------------------------------
| 2 | 4 | Last Msg | 1000001 | user |
-----------------------------------------------------------------
如果我只输入u-1000001
,我会得到相同的结果,只是没有组行。您可以看到conversation_id
1 被省略,因为用户和组都已阅读该对话中的消息。
我知道这是一个复杂的问题,但我非常感谢您的时间和帮助!
解决方案
推荐阅读
- xamarin.forms - First try at HTTPClient in Xamarin.Forms not working
- python - 如何获取列表中两个相同元素之间的连续元素?
- c - Arduino - 串行通信不起作用
- python - 在 Python 中创建带有条件的函数
- javascript - 在我的 apollo graphQL express 服务器中实现一个套接字连接
- c# - EF Code First 更改数据类型 bool?布尔和整数?到 int
- image - 数字图像分析双线性插值
- sql - FROM 子句中的临时表而不是 WITH 子句
- amazon-web-services - 从 s3 nodejs 中删除文件夹
- photoshop - 在哪里可以找到批处理... jsx 文件(Photoshop 标准脚本)