小编典典

递归选择帮助

sql

这是情况。我有两个表:

  • 用户(网站的注册用户),
  • 消息(彼此之间发送的个人消息)

消息表具有以下列(仅是重要的列):

  • ID,
  • 发件人(发送消息的用户的ID),
  • 发送消息的用户的接收者ID),
  • reply_to(此消息要回复到的消息的ID,可以为NULL)

我需要做的是构造一个SELECT查询,该查询将选择2个用户之间的完整对话。即,如果用户A回复了从用户B发送的消息,而用户B回复了该消息,我想得到如下三行:

  • message03:回复message02
  • message02:回复message01
  • 从用户A到用户B的message01

我确信可以基于reply_to字段构造这样的SELECT查询,但是我之前从未做过类似的事情,因此我需要一点帮助。

SELECT查询应针对MySQL数据库。


阅读 183

收藏
2021-04-28

共1个答案

小编典典

其实您是不对的:使用ANSI SQL,这 不可能的。某些具有供应商扩展名的数据库(例如Oracle的CONNECT BY)可能能够执行您想要的操作,但不能执行普通的旧SQL。

我的建议?更改您的数据,以便启用更简单的解决方案。

在这种情况下,请为每个消息指定一个session_id。如果用户发布新消息,请提供一个新值(当前未使用)。如果他们回复,请保留要回复的邮件的session_id。

然后,查询数据变得无关紧要。

2021-04-28