你好我有一个表用户,它有主键'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
我如何添加最新的消息?
答案 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