SilverStripe MYSQL查询错误:only_full_group_by

时间:2018-01-09 04:23:17

标签: mysql silverstripe silverstripe-4

我正在将一些旧的SS 2.4代码升级到SS4。执行以下查询时出现以下错误:

错误:

  

SELECT列表中的表达式#1不在GROUP BY子句中,并且包含非聚合列't.Total',该列在功能上不依赖于GROUP BY子句中的列;
这与sql_mode=only_full_group_by不兼容。

如何更新此查询以与mysql严格模式兼容?编辑my.cnf mysql_mode似乎没有生效

SELECT SalesRepRegion,COUNT(DISTINCT(SalesRepID)) as Total FROM Sale s
 WHERE SalesRepRegion <> 'NULL' AND YEARWEEK( SalesDate, 1 ) = ".$yearweek." AND Status <> 'Void'
 GROUP BY SalesRepRegion

2 个答案:

答案 0 :(得分:0)

在MysqlDatabase.php中,SilverStripe 4将mysql_mode设置为ANSI。要修复我只是把上面的查询放在上面我遇到了麻烦。这将删除only_full_group_by模式

DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');

答案 1 :(得分:0)

您需要将SELECT列表中的所有项目添加到GROUP BY语句中。

SELECT SalesRepRegion,COUNT(DISTINCT(SalesRepID)) as Total FROM Sale s
 WHERE SalesRepRegion <> 'NULL' AND YEARWEEK( SalesDate, 1 ) = ".$yearweek." AND Status <> 'Void'
 GROUP BY SalesRepRegion, Total

正如其他人所提到的,这是由于MySQL 5.7.5+改变GROUP BY的行为方式,以符合SQL99。