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

  • MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法已关闭评论
  • 17 次浏览
  • A+
所属分类:网站建设

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

  

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

  我们都知道,现在很多完善的用户系统都会提供登录记录功能,而且在之前的公安备案交互式网站的时候就发现,这些功能也都是里面的一些要求,而我们的泪雪用户中心这次升级也注定要完善这个功能,那么用户的登录记录就必须做好控制,否则数据库就会无限制的增加,用户的登录记录也就变得无限制的增加,从而造成数据库的冗余和不必要的浪费,所以子凡选择用MySQL的嵌套语句和not
in来保留最新的100条或者1000条登录记录。

  其中子凡就遇到了一个问题:

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,所以就想到绕开一下,把这个嵌套再来一层,这样似乎就完美解决了,例如:

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子句中,就不必出现嵌套再嵌套。

  

select * from (select id from table limit 12) as foo;

  但似乎这个方法并不太适用于子凡这个场景,所以这里分享出来给大家一个学习参考,可以用在其它的地方或者场景还是极其不错的。

  来源:泪雪博客

  • 我的小程序
  • 这是我的小程序扫一扫
  • weinxin
  • 我的熊掌号
  • 这是我的熊掌号扫一扫
  • weinxin
avatar