在查询构建器中查询关系和分组依据

时间:2019-05-28 11:43:31

标签: php mysql laravel-5 query-builder laravel-query-builder

在查询中出现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:选择countriesname,COUNT(users.country_id)来自countries的总数
  users上的内部联接userscountry_id = countriesidusers分组。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。仅当我将“严格”模式禁用为假时才有效

1 个答案:

答案 0 :(得分:1)

在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;