2016-04-25 42 views
-1

我有2代表的消息.. 1-用户,, 2的消息组由同一用户

我写此查询,但它不显示最后一个问题,我需要最后的主题

select (
     CASE WHEN messages.sender = 68314 THEN messages.receiver ELSE messages.sender END 
     ) AS user_id, 
     MAX(messages.added) last_added,messages.subject, 
     MAX(messages.id) as last_id,users.username 
FROM messages 
INNER JOIN users ON users.id = IF(messages.sender = 68314, messages.receiver, messages.sender) 
WHERE (messages.sender = 68314 or messages.receiver = 68314) AND messages.sender!=0 
GROUP BY 
(
    CASE WHEN messages.sender = 68314 THEN messages.receiver ELSE messages.sender END 
) 
ORDER BY last_added DESC 

它显示第一个主题,而不是最后一个主题。

回答

0

请给这个查询一个尝试。它首先选择max(id)与ID 68314交谈的人的消息,假设这些消息是最后创建的......并且加入消息,并且与用户加入以获取其他人的姓名。

SELECT last_messages.user_id, 
     m.added as last_added, 
     m.subject, 
     last_messages.last_id, 
     u.username 
FROM messages m 
INNER JOIN 
    (SELECT IF(sender = 68314,receiver,sender) as user_id, 
     MAX(id) as last_id 
    FROM messages 
    WHERE IF(sender = 68314,sender,receiver) = 68314 
    GROUP BY user_id 
)last_messages 
    ON last_messages.last_id = m.id 
INNER JOIN users u ON last_messages.user_id = u.id 
ORDER by last_added; 

sqlfiddle