Неправильный групповой по DATE_FORMAT в Mysql - PullRequest
0 голосов
/ 02 июня 2018

Существует следующая модель запроса:

return \DB::table('clients')->select(DB::raw("
            DATE_FORMAT(result_test.created_at, '%M %e %Y') AS day,
            COUNT(result_test.id) AS passed"))
            ->leftJoin('result_test', 'result_test.client_id', '=', 'clients.id')
            ->where('clients.doctor_id', $user_id)
            ->whereBetween('result_test.created_at', array($startDate, $endDate))
            ->orderBy('result_test.created_at')
            ->groupBy('day')
            ->get();

Обратите внимание на фрагмент:

DB::raw("
                DATE_FORMAT(result_test.created_at, '%M %e %Y') AS day,
                COUNT(result_test.id) AS passed")

После этого я попытался сгруппировать строки по AS day:

->groupBy('day')

И у меня появляется это сообщение об ошибке:

42000/1055 - db.result_test.created_at' isn't in GROUP BY

Что не так с запросом?

Когда я убрал это: ->orderBy('result_test.created_at') он начинает работать.Почему?

1 Ответ

0 голосов
/ 02 июня 2018

Вы получаете это, потому что 'result_test.created_at' не входит в выбранную группу.

return \DB::table('clients')->select('result_test.created_at',DB::raw("
            DATE_FORMAT(result_test.created_at, '%M %e %Y') AS day,
            COUNT(result_test.id) AS passed"))
            ->leftJoin('result_test', 'result_test.client_id', '=', 'clients.id')
            ->where('clients.doctor_id', $user_id)
            ->whereBetween('result_test.created_at', array($startDate, $endDate))
            ->orderBy('result_test.created_at')
            ->groupBy('day')
            ->get();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...