帮助递归SELECT

Ric*_*nop 3 mysql sql

这是情况.我有两张桌子:

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

消息表包含这些列(只是重要的列):

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

我需要做的是构建一个SELECT查询,它将选择2个用户之间的完整对话.即如果用户A回复用户B发送的消息并且用户B回复该消息,我想得到三行,如下所示:

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

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

SELECT查询应该是针对MySQL数据库的.

cle*_*tus 7

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

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

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

然后查询数据变得微不足道.


Kal*_*see 6

我建议conversation_idmessages表格中添加一个字段.每个新的非回复消息都将生成conversation_id,然后基于该消息的每个回复将使用相同的id.然后你的查询很简单:

select * from messages where conversation_id = ? order by id asc
Run Code Online (Sandbox Code Playgroud)