mysql5.7不兼容5.6
发布于 9 年前 作者 Hmilyxy 15472 次预览 最后一次回复是 8 年前 来自 分享
SELECT * FROM (SELECT id, a_title, a_update_time, a_gid FROM articles WHERE a_gid in (4,5,6, 7) ORDER BY a_update_time DESC) a GROUP BY a_gid ORDER BY a_update_time DESC
5.6中得出的结果是正确的,是安装我想要的结果排序的
SELECT id, a_title, a_update_time, a_gid FROM articles WHERE a_gid in (4,5,6, 7) ORDER BY a_update_time DESC这个查询语句的结果
得到就是我想要的分别取a_gid中最新的一条
但是在5.7的版本中就不是这个结果了,可以自己试试
8 回复
5.7大改了实现
我用5.7也遇到过很奇怪的问题
建议还是回5.5/5.6吧 SAD
之前我写过跟帖子中一样的语句,当时我就在想,这种用法的行为是不被sql规则所保证的,只能祈祷它的实现上刚好出来合适的结果。
试试这个吧,我没有实际跑过。
@alsotang 这句的空间复杂度可能较高,表大的时候不知道效率如何。不过 mysql 没有 pg 的 window 函数,所以如果你们表大的话,还是专门写个函数来并发取每个
a_gid的最新一条吧。看这个意思,5.7版本的group by 语句select非聚合的列不会选择组内第一行了吧?
任何不刷changlog就升级的都是耍流氓
瞧见了,再补充下吧,修改mysql的sql_mode模式 可以通过语句
select @@sql_mode;查看当前使用模式不要吓我,今天刚把5.6的mysql升级成了5.7的。
@stonephp 修改下模式就能解决了