查询文章的上下篇Sql语句



本来觉得这个查询不用大动干戈的洋洋洒洒写一篇文章的;不过看到不少人在这栽跟头;还是简单总结下吧;

文章内容页一般都会有上一篇和下一篇的功能;

白俊遥博客

那么查询上下篇的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 LIMIT 1;     #上一篇
SELECT * FROM bjy_article WHERE id>10 LIMIT 1;     #下一篇

这就完了吗?NO;如果用这sql取;下一篇没问题了;但是上一篇会一直是第一篇文章!

这时来个倒序即可;

SELECT * FROM bjy_article WHERE id<10 ORDER BY id DESC LIMIT 1;     #上一篇


白俊遥博客
请先登陆后发表评论
  • 最新评论
  • 总共5条评论
白俊遥博客

香蕉你个banana:oreder by 的优先级要大于limit 吧, 可以把limit放在order by 前面吗

2016-08-10 18:33:34 回复

白俊遥博客
  • 云淡风晴 回复 香蕉你个banana:不可以的;感谢提醒;已修正;
  • 2016-08-10 22:21:00 回复
白俊遥博客

:受教受教!

2016-08-05 14:35:12 回复

白俊遥博客

第一缕阳光白俊遥博客

2016-04-22 11:22:52 回复

白俊遥博客

木祁:不错!

2015-07-17 16:39:15 回复

白俊遥博客

bureak:强

2015-05-19 19:31:42 回复