文档章节

查询文章的上下篇Sql语句

白俊遥
 白俊遥
发布于 2016/03/06 21:22
字数 447
阅读 17
收藏 0



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

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

白俊遥博客

那么查询上下篇的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;     #上一篇



© 著作权归作者所有

白俊遥
粉丝 18
博文 58
码字总数 28701
作品 3
朝阳
程序员
私信 提问
Django 实战1:搭建属于自己社工查询系统(上)

前面的文章已经把模板、模型、视图、表单等知识点逐一讲解,大家已经熟悉它们具体用法。但如何将其串联起来还一筹莫展。本篇文章分享我之前做过的一个小项目,帮助大家抹开这一层迷雾。 1 想...

猴哥Yuri
2018/04/09
0
0
数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(二)之SQL解析

关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码的疑问每条留...

芋艿V
2017/07/30
0
0
数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(二)之SQL解析【推荐阅读】

🙂🙂🙂关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码...

芋道源码掘金Java群217878901
2017/07/30
0
0
alter table新增字段操作究竟有何影响?(上篇)

很久以前就有个疑问,见过一些表设计时会留出几个reverse的字段,目的是为了以后扩展,但此时设计的字段类型、长度等都是预计的,未来是否可用,不好说,那为什么会这么做呢?可能的原因是:...

bisal
2015/05/01
0
0
Hibernate(一)

Hibernate基础 1.1 Hibernate与JDBC的优缺点 Hibernate 优点 1、比较简单 2、数据缓存:一级缓存 二级缓存 查询缓存 3、移植性比较好 缺点 1、因为sql语句是hibernate内部生成的,所以程序员...

Hu_Captain
2015/09/06
85
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部