后台日志统计数据库报错 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'fecmall.admin_visit_log.person' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

问题咨询 · z1847961679 · 于 4年前 发布 · 3008 次阅读

小白教程刚安装的2.3.7,什么都没动。

后台点击日志统计 报数据库错误

Http status: 500 Internal Server Error
ajaxOptions: error
thrownError: Internal Server Error
Exception (Database Exception) 'yii\db\Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'fecmall.admin_visit_log.person' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
The SQL being executed was: select count(*) as count from (select account,person,menu ,count(*) as click_count 
		from `admin_visit_log`   where  created_at < '2019-11-21'  and  created_at >= '2019-10-20'  group by  account  ) as t '

in F:\fecmall\fecshop\vendor\yiisoft\yii2\db\Schema.php:674

Stack trace:
#0 F:\fecmall\fecshop\vendor\yiisoft\yii2\db\Command.php(1295): yii\db\Schema->convertException(Object(PDOException), 'select count(*)...')
#1 F:\fecmall\fecshop\vendor\yiisoft\yii2\db\Command.php(1158): yii\db\Command->internalExecute('select count(*)...')
#2 F:\fecmall\fecshop\vendor\yiisoft\yii2\db\Command.php(413): yii\db\Command->queryInternal('fetch', NULL)
#3 F:\fecmall\fecshop\vendor\fancyecommerce\fecshop\app\appadmin\modules\Fecadmin\block\logtj\Index.php(168): yii\db\Command->queryOne()
#4 F:\fecmall\fecshop\vendor\fancyecommerce\fecshop\app\appadmin\modules\Fecadmin\block\logtj\Index.php(45): fecshop\app\appadmin\modules\Fecadmin\block\logtj\Index->getTableTbody()
#5 F:\fecmall\fecshop\vendor\fancyecommerce\fecshop\app\appadmin\modules\Fecadmin\controllers\LogtjController.php(25): fecshop\app\appadmin\modules\Fecadmin\block\logtj\Index->getLastData()
#6 [internal function]: fecshop\app\appadmin\modules\Fecadmin\controllers\LogtjController->actionIndex()
#7 F:\fecmall\fecshop\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#8 F:\fecmall\fecshop\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#9 F:\fecmall\fecshop\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('index', Array)
#10 F:\fecmall\fecshop\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('fecadmin/logtj/...', Array)
#11 F:\fecmall\fecshop\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#12 F:\fecmall\fecshop\appadmin\web\index.php(50): yii\base\Application->run()
#13 {main}
共收到 7 条回复
Fecmall#14年前 1 个赞

1.将报错信息写道title里面

2.你使用的是mysql-5.7吧

MySQL5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。 比如在使用group by进行分组查询报错

自行google关键词:SELECT list is not in GROUP BY clause and contains nonaggregated , 资料很多

3.解决了,请分享你的经验

z1847961679#24年前 1 个赞

解决方法

1.更改配置,关闭mysql严格模式

common/config/main-local.php

增加on afterOpen 配置

        // Mysql部分的配置
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=127.0.0.1;dbname=fecmall',
            'username' => 'root',
            'password' => '123456',
            'charset' => 'utf8',
            'on afterOpen' => function ($event) {
                $event->sender->createCommand("set session sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'")->execute();
            }

        ],

2.重写该查询

3.等新版本优化

Fecmall#34年前 0 个赞

@z1847961679 #2楼

应该可以在mysql配置文件里面配置吧

Fecmall#44年前 0 个赞

论坛有相关帖子:http://www.fecmall.com/topic/803

cococup#54年前 0 个赞

1,打开mysql数据库客户端 2,执行 select @@global.sql_mode,去掉ONLY_FULL_GROUP_BY 3,执行set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

  1. docker-compose exec mysql bash
  2. cd /etc/mysql
  3. nano mysql.cnf
  4. 底部添加
    [mysqld]
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
  5. exit
  6. docker-compose restart mysql
Fecmall#73年前 0 个赞

@qq2801863263 #6楼 多谢分享。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics