按ID分组对话并加入最新消息

时间:2014-08-18 11:07:07

标签: php mysql laravel laravel-4 greatest-n-per-group

我有2张桌子。

conversations

id | user_from | user_to | subject

messages

id | user_id | conversation_id | message

现在我想拉出特定User的所有对话。但是,我无法知道如何做到这一点。我当前的解决方案为每次对话提供了最早的消息。

DB::table('conversations')
->where('user_from', '=', $this->id)
->orWhere('user_to', '=', $this->id)
->join('messages', 'conversations.id', '=', 'messages.conversation_id')
->groupBy('conversations.id')
->get();

如何在每次对话时收到最新消息?

1 个答案:

答案 0 :(得分:0)

在普通的Mysql中你可以使用额外的自我加入消息,根据你的问题,我猜消息表中的id设置为auto_increment所以我使用MAX(id)来获取每次会话的最近消息ID

SELECT 
c.* 
FROM 
conversations c 
JOIN messages m ON(m.conversation_id = c.id)
JOIN  (SELECT conversation_id,MAX(id) ic FROM messages GROUP BY conversation_id) mm
ON(m.conversation_id = mm.conversation_id AND m.id = mm.id)