谢谢您的帮助!我对SQL很陌生。并感谢您通过我的详尽解释与我保持联系。只是要确保我详细:
我正在构建消息传递系统。我需要做的是按DESC
的顺序检索1个或多个指定用户的最新未读消息。
这是我当前系统的结构:
可以在2个或更多用户和/或组之间创建一个conversation
,并且每个用户和/或组都与该conversation
相关联。 conversation
中的用户/组可以互相发送messages
。
发送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条消息-“第一条消息”和“最后一条消息”。
假设我是用户u-1000001
和组g-1000001
。您可以看到此用户和组在对话1、2和3中在一起。通过查看assoc_user_group__message
表,您还可以看到此用户和组已经阅读了会话1中的两条消息。
我需要做的是能够指定u-1000001
和/或g-1000001
,并按指定的用户和/或群组所在的每次会话检索最新的未读消息。最新未读邮件DESC
(由message_id
而非send_datetime
发出)。我还需要能够指定一个message_id
来在第一个请求之前检索X数量的未读消息,或者在第一个请求之后检索X数量的新的未读消息(message_id < 4
或message_id > 4
)
我需要为每个未读消息检索以下字段: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
和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被省略了,因为用户和组都已阅读该会话中的消息。
我知道这是一个复杂的问题,但是我非常感谢您的时间和帮助!