【问题标题】:Group conversation by ID and join the most recent message按 ID 分组对话并加入最新消息
【发布时间】:2014-08-18 11:07:06
【问题描述】:

我有 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();

如何在每次对话中获得最新消息?

【问题讨论】:

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


    【解决方案1】:

    在普通的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2014-02-16
      • 2015-03-03
      • 2015-11-06
      • 2018-11-15
      相关资源
      最近更新 更多