欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

查询文章的上下篇Sql语句

程序员文章站 2022-05-01 18:54:30
直接开入正题 文章内容页一般都会有上一篇和下一篇的功能; 那么查询上下篇的sql语句应该怎么写呢;示例数据表:zmd_article自增主键:id当前文章id:10 肯定有人说,这简单啊id+1和id-1不就OK了;sql无非如下: 写出这2句sql后;大部分人稍加思索就会发现不妥;如果中间删除了几 ......

直接开入正题

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

查询文章的上下篇Sql语句

那么查询上下篇的sql语句应该怎么写呢;
示例数据表:zmd_article
自增主键:id
当前文章id:10

肯定有人说,这简单啊id+1和id-1不就ok了;
sql无非如下:

1 select * from zmd_article where id=10-1;     #上一篇
2 select * from zmd_article where id=10+1;     #下一篇

写出这2句sql后;
大部分人稍加思索就会发现不妥;
如果中间删除了几篇;
那取到的值就成空了?
这时有人在一旁大喊;
可以用for循环啊;
再来个if直到不为空为止;
不经脑子的随便一想;
貌似行得通;
但是作为严谨的程序猿;
认真思考这个不算方法的方法时候立马发现2个严重的问题;

  1. 我只是想取上一篇文章;结果来了个for查询了nnnn次,严重浪费资源;

  2. 假设现在一共10篇文章,第11篇就为空了,如果用for就会无限循环下去一直为空;
    如此来说;

果断是不能这样写了;
这时又有人在一旁大喊;
用limit不就可以了;
正解;

1 select * from zmd_article where id<10 limit 1;     #上一篇
2 select * from zmd_article where id>10 limit 1;     #下一篇

这就完了吗?
no;
如果用这sql取;
下一篇没问题了;
但是上一篇会一直是第一篇文章!
这时来个倒序即可;

1 select * from zmd_article where id<10 order by id desc limit 1;     #上一篇

文章转自:https://www.cnblogs.com/zmdComeOn/p/9617601.html