如何在Laravel 5.5中同时使用GroupBy和OrderBy

时间:2018-01-26 20:17:34

标签: php mysql laravel-5.5 laravel-eloquent laravel-query-builder

我试图查询邮件并按对话对其进行分组并获取每个对话中的最后一条消息,我的表结构是

Table Messages(id(int), user_from(varchar), user_to(varchar), message(text), read(bool), chat_id(int), created_at(time_stamp), updated_at(time_stamp))

在搜索了很长一段时间之后,我认为我解决了我的问题,但我不知道如何在Laravel 5.5中使用eloquent或Query Builder实现这个

SELECT * FROM messages WHERE id IN(
        SELECT MAX(id)
            FROM messages
            GROUP BY chat_id
    )

1 个答案:

答案 0 :(得分:0)

我知道已经有一段时间了,您必须为此找到解决方案。但是我遇到了类似的问题,花了一个多小时才解决,所以我认为值得在这里确认解决方案。

是的,使用Max可以解决这里的情况。我使用查询生成器,它可能像:

DB::table('messages')
->selectRaw('max(id) as id, chat_id')  // you may add other fields
->groupby('chat_id')
->orderby('id')  // you may use other fields to sort
->get();