在查询构建器中查询关系和分组依据
Query relation and group by in query builder
在我的查询中出现 sql 错误,我相信我的查询构建器可能格式不正确,但无法弄清楚我做错了什么。
我已经尝试在数据库中直接测试我的查询并且它有效,但是当使用查询生成器进行翻译时它不起作用。
$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]: Syntax error or access violation: 1055 'db.countries.name' isn't in GROUP BY (SQL: select countries
.name
, COUNT(users.country_id) as total from countries
inner join users
on users
.country_id
= countries
.id
group by 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;
P.S。仅当我将 'strict' 模式禁用为 false
时它才有效
在 sql 查询中使用 group by 子句时,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;
在我的查询中出现 sql 错误,我相信我的查询构建器可能格式不正确,但无法弄清楚我做错了什么。
我已经尝试在数据库中直接测试我的查询并且它有效,但是当使用查询生成器进行翻译时它不起作用。
$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]: Syntax error or access violation: 1055 'db.countries.name' isn't in GROUP BY (SQL: select
countries
.name
, COUNT(users.country_id) as total fromcountries
inner joinusers
onusers
.country_id
=countries
.id
group byusers
.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;
P.S。仅当我将 'strict' 模式禁用为 false
时它才有效在 sql 查询中使用 group by 子句时,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;