mysql - 如何查询私有(private)消息收件箱的2个关系表

标签 mysql

对于我尝试创建私有(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/

相关文章:

php - 使用 db 进行页面翻译

mysql - 如何使用配置和库文件完全删除 MySQL?

多插入的 PHP/MySQL 和 Doctrine 最佳实践

PHP/MySQL 联系人列表

php - Symfony 中预期的不同类型

mysql - 在一个查询中计算多列

c# - 如何计算选票的正确语法是什么

java - 将某些列复制到另一个表中并在同一 SQL 语句中插入新值?

mysql - 如何从 MySql 数据文件中恢复数据?

python - SQLalchemy - 迭代所有映射表