THINKPHP5 + mysql5.7+下出现如下错误提示
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'file_manage.type' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
导致此错误的原因是:mysql5.7中only_full_group_by是开启的
解决方法:
方法0、点击MySQL选择MySQL settings ->选择sql-mode->选择sql-none和sql-user mode皆可。
方法1:如果不是集成环境,直接进入配置文件,修改my.cnf(windows下是my.ini),删掉only_full_group_by这一项即可。
可是我的环境是用的云数据库无法使用以上方法
方法2:
在不修改MySQL配置文件的情况下,需要修改sql语句来执行。
group by后面的列名,还是和以前一样通过select直接获取,而对于select中获取非group by的信息,则要通过any_value()函数。
(推荐用下面的方法)
// 导致错误的语句
Db::name('file_manage')->field('count(*) as num,cid,type')->where($map)->group('cid')->select();
// 改成以下语句
Db::name('file_manage')->field('count(*) as num,cid,any_value(type) as type')->where($map)->group('cid')->select();