2

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

错误:

列表的表达式#1SELECT不在子句中,并且包含在功能上不依赖于子句中的列的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
4

3 回答 3

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。

于 2018-01-10T01:01:26.147 回答
0

您可以将以下行添加到您的_config.php

DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');
于 2021-09-11T11:16:09.180 回答
0

原来 SilverStripe 4 在 MysqlDatabase.php 中将 mysql_mode 设置为 ANSI。要解决此问题,我只需将以下内容放在我遇到问题的查询之上。这将删除 only_full_group_by 模式

DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');
于 2018-01-09T06:27:10.443 回答