zoukankan      html  css  js  c++  java
  • 查询文章的上下篇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-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;     #上一篇
  • 相关阅读:
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉树的后序遍历
    从上往下打印二叉树
    栈的压入,弹出序列
    包含min函数的栈
    JS基础知识
    有序列表、无序列表、网页的格式和布局
    样式表(宽度和高度、背景字体、对齐方式边界与边框)
  • 原文地址:https://www.cnblogs.com/shuaibai123/p/5248618.html
Copyright © 2011-2022 走看看