本来觉得这个查询不用大动干戈的洋洋洒洒写一篇文章的;
不过看到不少人在这栽跟头;
还是简单总结下吧;
文章内容页一般都会有上一篇和下一篇的功能;
那么查询上下篇的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个严重的问题;
如此来说;
果断是不能这样写了;
这时又有人在一旁大喊;
用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; #上一篇
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
华子 :确实聪明
2017-11-23 20:53:04 回复
Moon :感谢大神的分享,在你这里学习了很多很受益,特意上来评论支持下。学习的路还很漫长,我会一直关注你的
2017-06-19 08:22:17 回复
云淡风晴 :多谢支持;
2017-06-28 22:45:47 回复
傻兔的幸福 :其实我是来看多图上传的,结果直接吸引我把网站上其他的文章都读了,现在还没去搞多图上传
2017-02-23 17:34:36 回复
这般 :我也是
2018-10-21 17:26:42 回复
$ :我想说的是 你上下篇反了 下一篇是上一篇 http://baijunyao.com/article/21 自定义标签(2)是上一篇
2017-02-13 21:44:19 回复
香蕉你个banana :oreder by 的优先级要大于limit 吧, 可以把limit放在order by 前面吗
2016-08-10 18:33:34 回复
云淡风晴 :不可以的;感谢提醒;已修正;
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 回复
最新评论