语法错误或访问冲突:1140 GROUP 列混合 laravel

Posted

技术标签:

【中文标题】语法错误或访问冲突:1140 GROUP 列混合 laravel【英文标题】:Syntax error or access violation: 1140 Mixing of GROUP columns laravel 【发布时间】:2018-09-25 13:58:29 【问题描述】:

我已经写了这个带有分页的查询

$items = Item::select('items.*', 'sub_category_name', 'category_name', 'sub_category_slug', 'category_slug')
        ->join('sub_categories AS sc', 'sc.sc_id', 'items.sub_category_id')
        ->join('categories AS c', 'c.category_id', 'sc.category_id')
        ->where('items.is_active', '=', 1)
        ->where('sc.is_active', '=', 1)
        ->where('c.is_active', '=', 1)
        ->where('sc.sc_id', '=', $sub_category_id)
        ->paginate(1);

但它说

语法错误或访问冲突:1140 如果没有 GROUP BY 子句,将 GROUP 列 (MIN(),MAX(),COUNT(),...) 与没有 GROUP 列的混合是非法的

但是当我添加 ->groupBy('item_id'); 时,它会说

语法错误或访问冲突:1055 'books.items.item_name' 不在 GROUP BY 中

但是当我在 groupBy 子句中执行 item_name 时,它​​会告诉 groupBy 下一列。为什么?

【问题讨论】:

整个错误信息(包括查询)是什么? 【参考方案1】:

您可以在模式数组中评论 ONLY_FULL_GROUP_BY 行

【讨论】:

那在哪里?请您再解释一下好吗? 'modes' 是 'mysql' 选项之一(如 'driver'),如果有,请在模式数组中注释 ONLY_FULL_GROUP_BY【参考方案2】:

当你使用像 MIN(),MAX(),COUNT() AVG() 这样的聚合函数时,你必须使用 Group BY

但在最新的MYSQL 中,你也必须使用 select 中的所有列作为一个组 By。

在您的config/database.php 中关闭严格模式。

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

'strict' => false 之后,您也可以在单个列上使用 group by。

【讨论】:

以上是关于语法错误或访问冲突:1140 GROUP 列混合 laravel的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

混合组列与无组列

在 laravel 中删除无符号索引外键。语法错误或访问冲突:1091 Can't DROP;检查列/键是不是存在

SQLSTATE[42000]:语法错误或访问冲突:1075 表定义不正确;只能有一个自动列,并且必须将其定义为键

CakePHP 语法错误或访问冲突

插入记录时出现语法错误或访问冲突