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

原文 标签 mysql

对于我尝试创建私有(private)消息传递系统和制定一些 sql 语句的尝试,我将不胜感激。
我有两张 table

消息:id(key)、receiver_id、sender_id、主题、消息、read_status、receiver_delete、sender_delete、send_date

回复:id(key)、message_id(与消息中的 id 相同)、message、sender_id、receiver_id、read_status、sender_delete、receiver_delete、send_date

我正在尝试创建一个类似于电子邮件收件箱的收件箱,其中收到的最新消息显示在顶部。查询消息并返回特定用户的所有消息并按 send_date 排序非常容易。

问题:我还需要查询回复表,以便收件箱项目不仅按消息的 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

那么你只有一张 table 可以选择

这是您的起点。根据需要修改查询。

阿苏敏:
发件人 ID 为 1 (ME)
收件人 ID 为 2 (YOU)
消息 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/

相关文章:

mysql - SQL:获取父级加入子级,其中子级类型 = 1 AND 子级类型 = 2

php - 如何使我的HTML表单查询可同时用于所有表单元素?

php - 删除从数据库检索到的TIME函数的零infront?

php - 在PHP中一次运行两个MySQL查询mysql_query()

php - 无法更新我的mysql数据库

php - PHP-在表格中显示最后3个SQL行(不起作用)

php - sprintf 错误 LIKE %%?%%

android - Android无法更新MySQL数据库中的表

mysql - 使用左联接查询

php - 是否有可能找出表mysql中匹配的字段?