从 sql 获取当前用户和其他用户之间的最后一条消息

Get last message between current user and others from sql

我想检索当前用户和其他人之间的最后一条消息,并像 facebook 一样将其显示在用户的消息页面中。我用过这个

select *
from ch_messages
where receiver='$current_user_id' or sender='$current_user_id' && (least(sender, receiver), greatest(sender, receiver), f_msg_date)     
in 
(
    select 
       least(sender, receiver) as x, greatest(sender, receiver) as y, 
       max(f_msg_date) as date
    from ch_messages
    group by sender, receiver
)

但它会获取从一个用户到当前用户的所有消息以及当前用户给该用户的最后一条消息。 I want it like this image

这是我的table结构

mid  => messages id
sender  => The sender of the message
receiver => The receiver of the message
msg   => The message sent
f_msg_date => date in which the message was sent

您只需要删除子查询中 reciver 周围的引号和 如果你想要最后一条消息,假设每条消息都有一个唯一的 id 列(自动递增)

  select *
  from ch_messages
  where receiver='$current_user_id' 
  or sender='$current_user_id' 
  AND ( id, least(sender, receiver), greatest(sender, receiver), f_msg_date )     
  in 
  (  select 
           max(id) 
         , least(sender, receiver) 
         , greatest(sender, receiver), 
           max(f_msg_date) 
      from ch_messages
      group by sender, receiver
  )