【问题标题】:Get last message between current user and others from sql从 sql 获取当前用户和其他用户之间的最后一条消息
【发布时间】:2017-04-10 20:57:42
【问题描述】:

我想检索当前用户和其他人之间的最后一条消息,并将其显示在用户的消息页面中,就像 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

这是我的表结构

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

【问题讨论】:

    标签: mysql database messaging


    【解决方案1】:

    您只需要在子查询中删除 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
      )
    

    【讨论】:

    • 我有,但它会显示所有消息,包括当前用户给其他人的消息。但我想要当前用户的消息,如果是最后一条消息,应该是回复
    • @ClementSam 。已更新答案希望是您所需要的或引导您获得正确的结果
    • 每条消息都有一个唯一的 id。我已经更新了查询,但它给出了一个错误。
    • @ClementSam 请告诉我确切的错误信息
    • #1241 - 操作数应包含 4 列 - 来自 phpmyadmin
    猜你喜欢
    • 2015-12-16
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多