MYSQL:从每个用户获取最新的消息

时间:2017-11-10 14:42:43

标签: mysql

你好我有一个表用户,它有主键'user_id'和一个表消息,其中包含'msg_id'(主要),'msg_from','msg_to','msg_date','msg_text'列。 msg_from和msg_to列用user_id填充。

我想要的是一个特定的用户(比如user_id = 1)来获取一个表,其中包含所有拥有msgs的用户以及每个用户最新的msg。

所以结果应该有列

 'id'(of the partner), 
 'msg_from', 
 'msg_to', 
 'msg_date', 
 'msg_text' 

每个用户最多出现一次。另外,我希望表格按“msg_date”列

排序

我知道我可以用

获得第一列
SELECT msg_from as id FROM messages WHERE msg_to=1 
UNION 
SELECT msg_to as id FROM messages WHERE msg_from=1

我如何添加最新的消息?

1 个答案:

答案 0 :(得分:0)

SELECT *
FROM (
        SELECT T.*,
               @rn := IF(@partner_id = partner_id
                         @rn + 1,
                         if(@partner_id := partner_id,1,1)
                        ) as rn
        FROM (
                SELECT  CASE WHEN `msg_from` = @userID THEN msg_to
                             WHEN `msg_to`   = @userID THEN msg_from
                        END as `partner_id`,
                        `msg_from`,
                        `msg_to`,
                        `msg_date`, 
                        `msg_text`
                FROM messages 
                WHERE @userID IN (`msg_from`, `msg_to`)
            ) T
        CROSS JOIN ( SELECT @partner_id := 0, @rn := 0, @userID := 1) as var
        ORDER BY `partner_id`, `msg_date` DESC
    ) T
WHERE T.rn = 1