ZFSYS

ZFCMS使用mysql5.7 groupby问题

44

报错

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'devzfcmsx2local.zf_post.ctime' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by  

解决方案

直接运行下面的sql即可

GPT解析

遇到这个错误是因为MySQL的sql_mode中包括了ONLY_FULL_GROUP_BY,这个模式要求,在使用GROUP BY语句时,SELECT的列、HAVING条件和ORDER BY中的列,都必须是GROUP BY中的列,或者是这些列的聚合函数。当你的ORDER BY子句中包含了不在GROUP BY中声明的列,而且没有使用聚合函数时,就会触发这个错误。

这里的错误信息指出,ORDER BY子句中使用了zf_post.ctime列,但这个列既不在GROUP BY中,也没有用聚合函数处理,与ONLY_FULL_GROUP_BY模式不兼容。

解决这个问题有几种方法:

1. 调整SQL查询

  • 添加到GROUP BY:如果逻辑上可行,你可以在GROUP BY子句中添加zf_post.ctime列。
  • 使用聚合函数:在ORDER BY中使用聚合函数处理zf_post.ctime列,比如MAX(zf_post.ctime)MIN(zf_post.ctime)

2. 禁用ONLY_FULL_GROUP_BY

如果你控制了数据库的配置,可以考虑禁用ONLY_FULL_GROUP_BY

  • 临时禁用(仅对当前会话):
    SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
  • 永久禁用(需要修改配置文件):
    • 找到MySQL的配置文件(通常是my.cnfmy.ini)。
    • [mysqld]部分,找到sql_mode,去掉其中的ONLY_FULL_GROUP_BY
    • 重启MySQL服务。

3. 调整全局SQL模式(不推荐)

也可以通过调整MySQL的全局sql_mode来避免这个错误,但这会影响到所有的数据库和表,可能会引起其他问题。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

注意:在全局范围内修改sql_mode可能会对数据库中的其他应用或查询产生意外的副作用,因此在使用这种方法前应仔细评估。

根据你的具体情况选择最合适的解决方案。如果你不确定如何操作,或者如果这是一个生产环境中的问题,建议先在一个测试环境中尝试,以避免数据丢失或服务中断。

  • 没有任何评论
最新帖子
[站长推荐] 一些站长/创业者使用的工具推荐 566
HTML+JS 全选与取消全选功能 528
有没有人做百度小程序啊 433
子枫内容系统更新记录 432
PHP 按照指定数量切割字符串 376
php composer更换国内源 358
composer 报错SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify 328
layui table 的宽度超出自动隐藏 324
怎么克服拖延症呀 323
tp5.1 分页样式 322
最近热帖
[站长推荐] 一些站长/创业者使用的工具推荐 566
HTML+JS 全选与取消全选功能 528
有没有人做百度小程序啊 433
子枫内容系统更新记录 432
PHP 按照指定数量切割字符串 376
php composer更换国内源 358
composer 报错SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify 328
layui table 的宽度超出自动隐藏 324
怎么克服拖延症呀 323
tp5.1 分页样式 322
近期热议
开始使用 143