gpt4 book ai didi

laravel - 按子查询对主查询排序

转载 作者:行者123 更新时间:2023-12-05 09:15:05 26 4
gpt4 key购买 nike

我需要列出一个用户的所有对话,按最后收到的消息排序(与whatsApp的对话相同)。

通过这种方式,它可以正确排序,但会重复对话。

我尝试使用 distinct() 来解决这个问题,但它最终要求将 messages.created_at 放在 select 中,然后它再次复制结果。

Chat::where('chats.from_id', $user_id)
->join('messages', 'chats.id', '=', 'messages.chat_id')
->select('chats.*')
->orderBy('messages.created_at', 'desc')
->get();

最佳答案

使用这个:

Chat::where('chats.from_id', $user_id)
->join('messages', 'chats.id', '=', 'messages.chat_id')
->select('chats.*', DB::raw('max(messages.created_at) latest_message'))
->groupBy('chats.id')
->orderBy('latest_message', 'desc')
->get();

您还可以使用关系,例如:

Chat::where('chats.from_id', $user_id)
->withCount(['messages as latest_message' => function($query) {
$query->select(DB::raw('max(created_at)'));
}])
->orderByDesc('latest_message')
->get();

关于laravel - 按子查询对主查询排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53111848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com