代码之家  ›  专栏  ›  技术社区  ›  hakkikonu

如何按唯一用户ID分组和按最新消息ID排序[[副本]

  •  -2
  • hakkikonu  · 技术社区  · 7 年前

    我的消息表

    message_id | message_body_content | sender_user_id | receiver_user_id
    1          | hello world          | 1000           | 1200
    2          | hello world 2        | 1001           | 1200
    3          | hello world again    | 1000           | 1200
    4          | xyz                  | 1001           | 1200
    5          | abc                  | 1200           | 1999
    

    我想按我的名字分组 message 表由 sender_user_id message_id

    message_id | message_body_content | sender_user_id | receiver_user_id
    3          | hello world again    | 1000           | 1200
    4          | xyz                  | 1001           | 1200
    

    消息\u id 对于 是3。这是理论上的。

    当我尝试的时候

    SELECT * FROM message WHERE receiver_user_id = 1200 
    GROUP BY sender_user_id
    ORDER BY message_id DESC
    

    它不起作用。因为MySQL首先 (最小消息id值)

    然后分类。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    我认为你不想“组队”。你想过滤。所以,我想你想要:

    SELECT m.*
    FROM message m
    WHERE m.receiver_user_id = 1200 AND
          m.message_id = (SELECT MAX(m2.message_d)
                          FROM message m2
                          WHERE m2.receiver_user_id = m.receiver_user_id AND
                                m2.sender_user_id = m.sender_user_id 
                         )
    ORDER BY m.message_id DESC;
    
        2
  •  1
  •   Littlefoot    7 年前
    select message_id, message_body_content, sender_user_id, receiver_user_id
    from message t
    where t.message_id = (select max(t1.message_id)
                          from message t1
                          where t1.sender_user_id = t.sender_user_id
                         )
    order by message_id;
    
        3
  •  0
  •   Zaynul Abadin Tuhin    7 年前

    select m.* from message m
    where (m.message_id,m.sender_user_id) in(
    SELECT max(message_id) as message_id ,sender_user_id
     FROM message  
    GROUP BY sender_user_id
     ) and m.receiver_user_id = 1200
    ORDER BY m.message_id DESC