1. MySQL : SELECT a.*,COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck FROM manifests a JOIN truck_entry_regs b ON a.id = b.manf_id LEFT JOIN truck_deliverys d ON a.id = d.manf_id WHERE a.manifest='550/7' GROUP BY a.id 2.Laravel 5.4 $results = DB::select('SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck FROM manifests a JOIN truck_entry_regs b ON a.id = b.manf_id LEFT JOIN truck_deliverys d ON a.id = d.manf_id WHERE a.manifest=? GROUP BY a.id', ['550/7'])
У меня такой же запрос. Первый запрос хорошо работает в MySQL (Sqlyog). Но если я запустил (второй запрос) в моем приложении laravel 5.4, он говорит:
QueryException in Connection.php line 647: SQLSTATE[42000]: Syntax error or access violation: 1055 'dbblpa.a.port_id' isn't in GROUP BY (SQL: SELECT a.*, COUNT(DISTINCT b.id) AS IndianTruck,COUNT(DISTINCT d.id) AS BdTruck FROM manifests a JOIN truck_entry_regs b ON a.id = b.manf_id LEFT JOIN truck_deliverys d ON a.id = d.manf_id WHERE a.manifest=550/7 GROUP BY a.id)
Как я могу вернуть все данные из таблицы с продолжением из других таблиц после присоединения? Если я добавлю a.id, a.name в select (например, выберите a.id, a.name, COUNT (DISTINCT b.id)) и добавьте a.id и a.name в GROUP BY, тогда он будет работать. Вопрос: если я возвращаю весь столбец из таблицы со счетом, я должен добавить все столбцы в группу? Я знаю, что это странно! Тогда как я могу получить свой ожидаемый результат в larvel 5.4 query builder?
Laravel 5.3 и 5.4 используют строгий режим для mysql по умолчанию. Это означает, что ONLY_FULL_GROUP_BY
режим ONLY_FULL_GROUP_BY
SQL. Но если ваша версия MySQL не менее 5.7.5, вы можете группировать первичный ключ таблицы и использовать все столбцы из этой таблицы в предложении SELECT, потому что они функционально зависят от ПК.
MySQL 5.7.5 и выше реализует обнаружение функциональной зависимости. Если включен режим ONLY_FULL_GROUP_BY SQL (который он по умолчанию), MySQL отклоняет запросы, для которых список выбора, условие HAVING или список ORDER BY относятся к неагрегированным столбцам, которые не имеют ни имени в предложении GROUP BY, ни функционально зависят от них , (До 5.7.5 MySQL не обнаруживает функциональную зависимость, а ONLY_FULL_GROUP_BY не включен по умолчанию.
( Обработка MySQL GROUP BY )
Ваши варианты:
Обновите MySQL до 5.7.5
Или отключите строгий режим в laravels db config ( config/database.php
)
// .. 'connections' => [ // .. 'mysql' => [ // .. 'strict' => false, // .. ], // .. ]
Обновить
Плохая новость для пользователя MariaDB (и xampp): MariaDB, похоже, не поддерживает «обнаружение функциональной зависимости» (пока). Все, что я мог найти, это этот билет .