留言讨论查询

Message discussion query

我尝试创建一个讨论系统,显示两个用户之间按时间排序的消息 喜欢图像 使用 SQL,例如,如果用户 10 想看他的与用户 45 的消息,这是我的 table 结构:

消息( id(PK), sender_id(FK_USER), receiver_id(FK_USER), 主题, 内容,created_at,updated_at);

我尝试了这个 sql 查询,但它没有显示我想要的内容:

select s.id,
       s.subjet,
       d.source_id as `source`,
       d.id,
       d.subject 
 from messages s,
      messages d
where s.destination_id=d.source_id 
  and d.source_id=s.destination_id 
  and s.source_id=202 
order by created_at asc;

如果我正确理解了您的 table 结构和要求,您可以尝试以下操作 -

SELECT *
  FROM MESSAGES
 WHERE SENDER_ID IN (10, 45)
   AND RECEIVER_ID IN (10, 45)
 ORDER BY CREATED_AT

或者像这样-

SELECT *
  FROM MESSAGES
 WHERE (SENDER_ID = 10 AND RECEIVER_ID = 45)
    OR (RECEIVER_ID = 10 AND SENDER_ID = 45)
 ORDER BY CREATED_AT

默认情况下,排序将以 ASC 方式完成,因此无需提及。

我认为您需要一个 select 案例(我已将所有专栏留作演示)

 select s.id, 
    case s.sender_id when 202 then s.subject else '' end, 
    case s.receicer_id when 202 then s.subject else '' end, 
    s.subject, s.content, s.created_at
from message s
where s.sender_id = 202
order by s.created_at ASC