代码之家  ›  专栏  ›  技术社区  ›  Clement Sam

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

  •  0
  • Clement Sam  · 技术社区  · 8 年前

    我想检索当前用户和其他用户之间的最后消息,并将其显示在用户的消息页面中,就像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
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   ScaisEdge    8 年前

    您只需删除子查询中Receiver周围的引号,然后 假设每个消息都有一个唯一的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
      )