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错误。
下面的图片中提出了这段代码我已尽力尝试但无法修复此错误。有人可以帮我解决这个问题吗?
我真的需要子查询
答案 0 :(得分:0)
这是一个解决方法,使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以加载更改。
请注意,下次更新WAMP时,很可能会覆盖对my.cnf
文件所做的更改,因此这不是永久解决方案。要进行永久性修复,您应该将查询更新为与默认sql_mode
兼容。