直接开入正题

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

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

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

 SELECT * FROM zmd_article WHERE id=10-1;     #上一篇
SELECT * FROM zmd_article WHERE id=10+1; #下一篇

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

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

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

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

 SELECT * FROM zmd_article WHERE id<10 LIMIT 1;     #上一篇
SELECT * FROM zmd_article WHERE id>10 LIMIT 1; #下一篇

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

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

感谢大家阅读到这里~~~

查询文章的上下篇Sql语句的更多相关文章

  1. 《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件

    <万能数据库查询分析器>实现使用SQL语句直接高效地访问文本文件 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要    用SQL语句来直接访问文本文件?是在做梦吗? ...

  2. oracle 查询最近执行过的 SQL语句(转载)

    oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼   分类: Database oracle 查询最近执行过的 SQL语句 select sql_text ...

  3. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

  4. sql server 查询性能最差的sql语句

    SELECT TOP 10 TEXT AS 'SQL Statement' ,last_execution_time AS 'Last Execution Time' ,(total_logical_ ...

  5. oracle 查询最近执行过的 SQL语句

    oracle 查询最近执行过的 SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc;   SELE ...

  6. 关于在页面上执行sql语句

    在页面上执行sql语句,首先在页面上顶一个文本域,让用户输入需要执行的sql语句. html代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  7. 查询Oracle正在执行的sql语句

    --查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...

  8. 查询系统正在运行的SQL语句

    查询系统正在运行的SQL语句: select a.program, b.spid, c.sql_text from v$session a, v$process b, v$sqlarea c wher ...

  9. 转载:SQL Server中查询CPU占用高的SQL语句

    SQL Server中查询CPU占用高的SQL语句 SQL Server 表变量的用法 究竟什么是敏捷测试--朱少民

随机推荐

  1. Java 线程池(ThreadPoolExecutor)原理解析

    在我们的开发中“池”的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 有关java线程技术文章还可以推荐阅读:<关于java多线程w ...

  2. 最火移动端跨平台方案盘点:React Native、weex、Flutter

    1.前言 跨平台一直是老生常谈的话题,cordova.ionic.react-native.weex.kotlin-native.flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头. ...

  3. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  4. C/C++中宏定义#pragma once与 #ifndef的区别

    为了避免同一个文件被include多次,我们可以通过以下两种方式来进行宏定义: 1. #ifndef方式2. #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两 ...

  5. centos7使用wordpress布署网站(2)

    1.接下来需要配置数据库,为使用wordpress做准备 修改认证方式: vim .../phpMyAdmin/config.inc.php [...] $cfg['Servers'][$i]['au ...

  6. InnoDB Insert Buffer(插入缓冲)

    InnoDB Insert Buffer(插入缓冲) 每个存储存储引擎自身都有自己的特性(决定性能以及更高可靠性),而InnoDB的关键特性有: 插入缓冲(Insert Buffer)-->Ch ...

  7. Javascript高级编程学习笔记(55)—— DOM2和DOM3(7)操作范围

    操作范围中的内容 在创建范围时,内部会为这个范围创建一个文档片段 范围所属的全部节点都会被添加到这个片段中 虽然选取范围可以不是完整的.良好的DOM结构 但是在这个为范围创建的文档片段中,会自己完缺少 ...

  8. 使用Java类加载SpringBoot、SpringCloud配置文件

    我们都知道平常在使用SpringBoot和SpringCloud的时候,如果需要加载一两个配置文件的话我们通常使用@Value("${属性名称}")注解去加载.但是如果配置文件属性 ...

  9. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  10. Python学习笔记【第十篇】:Python面向对象进阶

    保护对象的属性 如果有一个对象,当需要对其进行修改属性时,有2种方法 对象名.属性名 = 数据 ---->直接修改 对象名.方法名() ---->间接修改 为了更好的保存属性安全,即不能随 ...