对于我尝试创建私有(private)消息传递系统和制定一些 sql 语句的尝试,我将不胜感激。 我有两张 table
消息:id(key), recipient_id, sender_id, subject, message, read_status, recipient_delete, sender_delete, sent_date
回复:id(key), message_id(与消息中的id相同), message, sender_id, recipient_id, read_status, sender_delete, recipient_delete, sent_date
我正在尝试创建一个类似于电子邮件收件箱的收件箱,其中收到的最新消息显示在顶部。这非常容易查询消息并返回特定用户的所有消息并按发送日期排序。
问题:我还需要查询回复表,以便收件箱项目不仅按邮件的发送日期排序,还按回复排序。
因此,在收件箱中,用户将看到所有按日期排序的父邮件,但如果有特定邮件的新回复,则将位于顶部等。我希望我说清楚了。
请帮助我制定正确的 sql 语句以实现上述结果。
最佳答案
您应该只使用以下内容创建 1 个表:
id, recipient_id, sender_id, message_id, subject, message, read_status, recipient_delete, sender_delete, sent_date
在一条新消息上,您只需插入 message_id null
在回复中附上主要消息 ID
那么你只有一张表可以选择
这是您的起点。根据需要修改查询。
阿苏敏: 发件人 ID 为 1 (ME) 收件人 ID 为 2(您) 消息 ID 为 3(美国)
获取收到消息的收件箱
SELECT * FROM inbox WHERE recipient_id='2' and message_id IS NULL order by id desc
获取发送消息的收件箱
SELECT * FROM inbox WHERE sender_id='2' and message_id IS NULL order by id desc
获取所有消息
SELECT * FROM inbox WHERE (recipient_id='2' or sender_id='1') and message_id IS NULL order by id desc
获取带回复的消息
SELECT * FROM inbox WHERE (message_id='3' and (recipient_id='2' or sender_id='1')) or id='3' order by id desc
关于mysql - 如何查询私有(private)消息收件箱的2个关系表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56298193/