首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SilverStripe MYSQL查询错误: only_full_group_by

SilverStripe MYSQL查询错误: only_full_group_by
EN

Stack Overflow用户
提问于 2018-01-09 04:23:16
回答 3查看 631关注 0票数 2

我正在升级一些旧的SS2.4代码到SS4。在执行以下查询时,我会得到以下错误:

错误:

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

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

代码语言:javascript
复制
SELECT SalesRepRegion,COUNT(DISTINCT(SalesRepID)) as Total FROM Sale s
 WHERE SalesRepRegion <> 'NULL' AND YEARWEEK( SalesDate, 1 ) = ".$yearweek." AND Status <> 'Void'
 GROUP BY SalesRepRegion
EN

回答 3

Stack Overflow用户

发布于 2018-01-09 06:27:10

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

代码语言:javascript
复制
DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');
票数 1
EN

Stack Overflow用户

发布于 2018-01-10 01:01:26

您需要将选择列表中的所有项按语句添加到组中。

代码语言:javascript
复制
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+通过行为改变组以便符合SQL99的方式。

票数 1
EN

Stack Overflow用户

发布于 2021-09-11 11:16:09

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

代码语言:javascript
复制
DB::get_conn()->setSQLMode('REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48161408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档