【问题标题】:How to query 2 relational tables for private messaging inbox如何查询私人消息收件箱的 2 个关系表
【发布时间】:2019-05-24 18:53:40
【问题描述】:

如果我尝试创建私人消息传递系统并制定一些 sql 语句,我将不胜感激。 我有两张桌子

消息: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 语句以实现上述结果。

【问题讨论】:

标签: mysql


【解决方案1】:

您应该只使用以下内容创建 1 个表:

id、recipient_id、sender_id、message_id、主题、消息、 read_status, recipient_delete, sender_delete, sent_date

在新消息中,您只需使用 message_id null 进行交互

在回复时,您会附上主要消息 ID

那么你只有一张桌子可以选择

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

阿苏敏: 发件人 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

【讨论】:

  • 感谢您的回复。但我很困惑!在您的声明中获取带有回复的消息,为什么说 message_id=3?此外,所有消息都会将消息和回复显示为单独的行吗?我想如果电子邮件收件箱样式行。
  • 对于收件箱,我需要显示按最新排序的父消息,包括是否有回复。这是我遇到困难的地方
  • 当您点击一条消息时,您想显示带有所有回复顺序的消息以阅读电子邮件,对吗?所以你点击的消息是 id='3'。可以通过 message_id='3' 找到回复。 SQL 只是示例。您可以根据需要与他们一起玩。我的意思是你应该只有一张桌子而不是两张。
  • 再次感谢,但是原始发件人如何知道是否有回复?在他的收件箱中,由于为空,它不会显示。然后我如何选择以便原始消息将再次显示在他的收件箱中,但是当他单击它时,他当然会看到回复。这就是为什么我有两张桌子。
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 2012-09-09
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多