我正在将一些旧的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
答案 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。