You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

X2CRM自定义模块查看记录时触发SQL分组查询错误

X2CRM自定义模块详情页SQL语法错误问题

我在X2CRM中创建了一个自定义模块,随后在该模块中创建了一条新记录,并使用Log Time小部件记录时间。但从「全部记录」视图点击该记录名称查看详情时,出现以下错误:

CDbCommand执行SQL语句失败:SQLSTATE[42000]: 语法错误或访问违规: 1055 SELECT列表的第7个表达式不在GROUP BY子句中,且包含非聚合列'x2_db.x2_actions.complete',该列不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

我在谷歌上见过其他框架的类似问题,但此模块是通过后台管理区域的内置代码生成器创建的,那些解决方案不适用于此CRM。查看日志也未发现相关内容。

更新:
我在堆栈跟踪中发现,触发该SQL的调用来自源代码中的以下行:

ActionHistoryChartWidget::getChartData('1675792337', 1675967470, '8', 'tasks', NULL)


解决方法

方案1:修复ActionHistoryChartWidget的SQL查询逻辑

  1. 找到X2CRM源码中的protected/widgets/ActionHistoryChartWidget.php文件
  2. 定位到getChartData方法内生成SQL查询的代码段
  3. 检查SELECT语句中包含的x2_actions.complete字段,将其添加到GROUP BY子句中;如果该字段不需要展示在查询结果里,直接从SELECT列表中移除
  4. 保存修改后,刷新页面测试详情页访问

方案2:临时调整MySQL的sql_mode(不推荐长期使用)

如果暂时无法修改代码,可以临时关闭MySQL的only_full_group_by模式:

  1. 登录MySQL命令行控制台,执行:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
  1. 如需永久生效,修改MySQL配置文件(Linux为my.cnf,Windows为my.ini),找到sql_mode配置项,移除其中的ONLY_FULL_GROUP_BY,保存后重启MySQL服务

内容的提问来源于stack exchange,提问作者Farhan Gul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:05:17