SELECT * FROM (SELECT * FROM notifications WHERE popped = '0' ORDER BY id DESC) t WHERE t.userTo = '".$myId."' GROUP BY t.noteId, t.dataId, t.type
上面的代码在我的 Wamp 服务器上完美运行,该服务器运行在 MYSQL5.5.8 上。然后我升级到最新的 Wamp v3.0.6,它在 MYSQL5.7.14 上运行,我开始收到 #1055 错误。
我已尽我所能,但无法修复此错误。有人可以帮我解决这个问题吗?
我真的需要子查询
最佳答案
这里有一个解决方法,可以让 MySQL 5.7 在 GROUP BY
查询中像之前的版本一样运行 - 这不应该是公认的答案:
首先,找出您当前的sql_mode
:
SELECT @@sql_mode;
在我的测试服务器上,返回:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
您看到的错误是由 ONLY_FULL_GROUP_BY
标志引起的。您可以更新 MySQL 配置文件以删除该标志。查找并编辑您的 my.cnf
文件(IIRC,您可以从任务栏图标中的 WAMP 菜单访问它,但自从我上次使用 WAMP 以来已经有几年了,所以情况可能已经改变)。
检查其中是否已经定义了sql_mode
。如果没有,请将其添加到 [mysqld]
标题下的某个位置。使其值与您从上一个查询中获得的 sql_mode
相同,减去 ONLY_FULL_GROUP_BY
标志。所以就我而言,这将是:
[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
保存文件并重新启动 MySQL 以加载更改。
请注意,对 my.cnf
文件所做的更改很可能会在您下次更新 WAMP 时被覆盖,因此这不是永久解决方案。要实现永久修复,您应该更新查询以与默认 sql_mode
兼容。
关于php - 升级 WAMP SERVER 后 MySql 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330249/