GroupBy после orderBy для сложного запроса в Laravel

php mysql database laravel laravel-5.2

472 просмотра

3 ответа

Вот мой код для извлечения сообщений и группировки их для каждого чата

$query = DB::table('chats');

    $otherUserId= $request->input('loadId');
    if($otherUserId==0){
        $query->join('users as u1', 'u1.id', '=', 'chats.user1_id');
        $query->join('users as u2', 'u2.id', '=', 'chats.user2_id');
        $query->join('messages', 'messages.chat_id', '=', 'chats.id');
        $query->where('chats.user1_id', '=', '{$userId}');
        $query->orWhere('chats.user2_id', '=', '{$userId}');
        $query->select('messages.chat_id', 'messages.from_id', 'u1.id as    user1_id', 'u2.id as user2_id', 'messages.created_at', 'messages.body', 'messages.read', 'u1.name as user1_name', 'u2.name as user2_name', 'u1.picture_url as user1_pic', 'u2.picture_url as user2_pic');

        $query->orderBy('messages.created_at ', 'DESC');
        $query->groupBy('chat_id');
        $messages = $query->paginate(4);

Когда я запускаю запрос, результат не такой, как ожидалось, OrderBy приходит после группировки по. Я много пробовал, но не смог найти и найти решение. Я тоже попробовал это решение, но не смог заставить его работать. Order By перед группой By Eloquent (Laravel)

Пожалуйста, помогите мне, я потерял много времени, пытаясь разобраться. Заранее спасибо за помощь.

Автор: Logiclicker Источник Размещён: 08.11.2019 11:07

Ответы (3)


0 плюса

За одну строку перед страницей добавьте следующий код

dd($query->toSql());

Это возвратит строку запроса для отладки запроса mysql. Если вы все еще не можете выяснить, что происходит, вставьте его сюда, чтобы помочь вам.

Автор: H.Kontodios Размещён: 22.08.2016 10:43

0 плюса

Это потому, что это недопустимый синтаксис - помещать GROUP BYпредложение после ORDER BY- обратите внимание на формальное определение в документации. http://dev.mysql.com/doc/refman/5.7/en/select.html

Непонятно, чего вы на самом деле пытаетесь достичь - SQL не имеет особенно хорошей поддержки упорядоченных данных внутри агрегата.

Автор: Sam Dufel Размещён: 22.08.2016 10:48

0 плюса

Спасибо всем за помощь. Наконец-то я решил, мне помог этот ответ из другого поста https://stackoverflow.com/a/7745635/6279602, он работает с соединениями, а не с группой by, потому что group by не поддерживает упорядочение.

Автор: Logiclicker Размещён: 25.08.2016 06:31
Вопросы из категории :
32x32