php - 查询生成器中的查询关系和分组依据

标签 php mysql laravel-5 query-builder laravel-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;

附注仅当我将“严格”模式禁用为 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;

关于php - 查询生成器中的查询关系和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56341505/

相关文章:

php如何制作一个if str_replace?

php - 登录时检查哈希密码

php - 在 PHP 中调用带有 OUT 参数的存储过程

php - Laravel 5如何获取路线 Action 名称?

php - Laravel 5: Auth::guard($this->getGuard())->login($user); 之间的区别和 auth()->login($user);

php - 使用 ZendSkeletonModule 创建新模块 ZF3

PHP 写 stdClass 的另一种方式

PHP 脚本更新所有用户值而不是单个用户值

mysql - SQL无法创建表,errno 150

php - Laravel 5 双向表登录