在MySQL 5.7及以上版本,默认启用了ONLY_FULL_GROUP_BY模式,它要求SELECT后面出现的列必须要么在GROUP BY子句中,要么在聚合函数里。例如,如果用户写了SELECT id, name FROM table GROUP BY name,那么id不在GROUP BY里,也没有被聚合函数处理,就会触发这个错误。
这里最简单的处理方式就是临时关闭ONLY_FULL_GROUP_BY模式即可,代码如下:
Db::execute("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))");
相关文章