Отношение запросов и группировка в построителе запросов - PullRequest
0 голосов
/ 28 мая 2019

Получив ошибку sql в моем запросе, я думаю, что, возможно, неправильно сформирован мой построитель запросов, но не могу понять, что я делаю неправильно.

Alredy попытался протестировать мой запрос непосредственно в БД, и он работает, но при переводе с помощью построителя запросов это не работает.

$totalUserForCountry = DB::table('countries')
    ->select('countries.name', DB::raw('COUNT(users.country_id) as total'))
    ->join('users', 'users.country_id', '=', 'countries.id')
    ->groupBy('users.country_id')
    ->get();

Мой код ошибки:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 «db.countries.name» отсутствует в GROUP BY (SQL: выберите countries. name, COUNT (users.country_id) как общее от countries
внутреннее объединение users на users. country_id = countries. id сгруппировать по users. country_id)

Mysql-запрос напрямую к БД:

SELECT ct.name AS CountryName, COUNT(us.country_id) AS NumberOfUsers FROM countries AS ct
        INNER JOIN users AS us
        ON
        us.country_id = ct.id
        GROUP BY us.country_id;

PS Это работает, только если я отключаю «строгий» режим до false

1 Ответ

1 голос
/ 28 мая 2019

при использовании предложения group by в запросе sql предложение select может содержать только те столбцы, которые вы использовали в предложении group.

SQL-запрос для вышеуказанной проблемы будет:

SELECT ct.name AS CountryName, COUNT(us.country_id) AS NumberOfUsers FROM countries AS ct
    INNER JOIN users AS us
    ON
    us.country_id = ct.id
    GROUP BY us.country_id,ct.name;
...