您的位置:首页 > 数据库 > MySQL

MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法

2018-03-02 14:14 507 查看

MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法

转载:https://zhangzifan.com/mysql-select-limit.html
最近这一段时间其实子凡都在开发泪雪用户中心,目前进度已经过半,这一次的开发将很多的功能都做了深度的优化和升级完善,同时也会将我们的服务器从虚拟主机迁移到服务器,SSL/HTTPS 也将是必备之一,那么也在这开发中遇到了一些问题,不过也都很好的解决了,那么最近也是在开发用户系统的登录记录功能,所以子凡就简单的把这个问题分享一下解决方法吧!

我们都知道,现在很多完善的用户系统都会提供登录记录功能,而且在之前的公安备案交互式网站的时候就发现,这些功能也都是里面的一些要求,而我们的泪雪用户中心这次升级也注定要完善这个功能,那么用户的登录记录就必须做好控制,否则数据库就会无限制的增加,用户的登录记录也就变得无限制的增加,从而造成数据库的冗余和不必要的浪费,所以子凡选择用MySQL的嵌套语句和 not in 来保留最新的 100 条或者 1000 条登录记录。其中子凡就遇到了一个问题:
1
delete table where uid='6'and id NOT IN ( select id from table where uid='6' order by id desc LIMIT 3)
执行该条语句的时候会出现:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 的错误提示。也就是说 MySQL 不支持 limit,所以就想到绕开一下,把这个嵌套再来一层,这样似乎就完美解决了,例如:
1
delete from table where uid='6'and id NOT IN (select x.id from ( select id from table where uid='6' order by id desc LIMIT 3) as x)
看上去虽然变得好像负责了一点点,但是重点解决的问题,还算不错吧,同时子凡也在网上看到有人有更简单的方法,就是把限制条件放到 from 而非 where 子句中,就不必出现嵌套再嵌套。
1
select * from (select id from table limit 12) as foo;
但似乎这个方法并不太适用于子凡这个场景,所以这里分享出来给大家一个学习参考,可以用在其它的地方或者场景还是极其不错的。除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐