查询文章的上下篇Sql语句
2016-03-06 21:23
309 查看
本来觉得这个查询不用大动干戈的洋洋洒洒写一篇文章的;不过看到不少人在这栽跟头;还是简单总结下吧;
文章内容页一般都会有上一篇和下一篇的功能;
![](http://www.baijunyao.com/Upload/image/ueditor/20150516/1431706458653952.png)
那么查询上下篇的sql语句应该怎么写呢;
示例数据表:bjy_article
自增主键:id
当前文章id:10
肯定会有童鞋是说,这简单啊id+1和id-1不就OK了;sql无非如下:
写出这2句sql后;大部分人稍加思索就会发现不妥;如果中间删除了几篇,那取到的值就成空了?
这时有人在一旁大喊;可以用for循环啊,再来个if直到不为空为止;
不经脑子的随便一想;貌似行得通;但是作为严谨的程序猿,认真思考这个不算方法的方法时候立马发现2个严重的问题;
1:我只是想取上一篇文章;结果来了个for查询了NNNN次,严重浪费资源;
2:假设现在一共10篇文章,第11篇就为空了,如果用for就会无限循环下去一直为空;
如此来说;果断是不能这样写了;
这时又有人在一旁大喊;用limit不就可以了;
正解;
这就完了吗?NO;如果用这sql取;下一篇没问题了;但是上一篇会一直是第一篇文章!
这时来个倒序即可;
文章内容页一般都会有上一篇和下一篇的功能;
![](http://www.baijunyao.com/Upload/image/ueditor/20150516/1431706458653952.png)
那么查询上下篇的sql语句应该怎么写呢;
示例数据表:bjy_article
自增主键:id
当前文章id:10
肯定会有童鞋是说,这简单啊id+1和id-1不就OK了;sql无非如下:
SELECT * FROM bjy_article WHERE id=10-1; #上一篇 SELECT * FROM bjy_article WHERE id=10+1; #下一篇
写出这2句sql后;大部分人稍加思索就会发现不妥;如果中间删除了几篇,那取到的值就成空了?
这时有人在一旁大喊;可以用for循环啊,再来个if直到不为空为止;
不经脑子的随便一想;貌似行得通;但是作为严谨的程序猿,认真思考这个不算方法的方法时候立马发现2个严重的问题;
1:我只是想取上一篇文章;结果来了个for查询了NNNN次,严重浪费资源;
2:假设现在一共10篇文章,第11篇就为空了,如果用for就会无限循环下去一直为空;
如此来说;果断是不能这样写了;
这时又有人在一旁大喊;用limit不就可以了;
正解;
SELECT * FROM bjy_article WHERE id<10-1 LIMIT 1; #上一篇 SELECT * FROM bjy_article WHERE id>10+1 LIMIT 1; #下一篇
这就完了吗?NO;如果用这sql取;下一篇没问题了;但是上一篇会一直是第一篇文章!
这时来个倒序即可;
SELECT * FROM bjy_article WHERE id<10-1 LIMIT 1 ORDER BY id DESC; #上一篇
相关文章推荐
- 查询文章的上下篇Sql语句
- 查询文章的上下篇Sql语句
- Oracle学习之sql语句执行过程分析
- SSD 下的 MySQL IO 优化
- MySQL 调优/优化的 100 个建议
- 傻瓜式理解之一致哈希(仅供初学者理解)
- mybatis整合redis重写 生成key的方法
- Oracle学习之oracle的启动停止
- SQL优化,处理百万级以上的数据处理
- oracle常用管理命令
- Mysql优化(一)思路介绍
- mysql 中查出多条记录中的不同type值的pv字段的差值
- 菜鸟使用MySQL存储过程and临时表,供新手参考,请高手斧正
- 安装mysql-5.7.11-winx64.zip 版本, 启动服务 遇 3534 错误的解决方法
- mongodb单机配置shard分片集群
- MYSQL:ERROR 1148: The used command is not allowed with this MySQL version
- MYSQL错误 NO.1130 ERROR的解决
- MySql的安装
- java对redis的基本操作(转)
- mysql数据库安装方法