请选择 进入手机版 | 继续访问电脑版

找我啊

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 658|回复: 0

查询文章的上下篇Sql语句

[复制链接]

19

主题

21

帖子

109

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
109
QQ
发表于 2019-6-12 20:30:54 | 显示全部楼层 |阅读模式
一般的文章系统都带一个上一条 下一条 的链接,这里抄一个快速查询的方法

示例数据表:article
自增主键:id
当前文章id:10
肯定会有童鞋是说,这简单啊id+1和id-1不就OK了;
sql无非如下:
  1. SELECT * FROM bjy_article WHERE id=10-1;     #上一篇
  2. SELECT * FROM bjy_article WHERE id=10+1;     #下一篇
复制代码



写出这2句sql后;
大部分人稍加思索就会发现不妥;
如果中间删除了几篇;
那取到的值就成空了?
这时有人在一旁大喊;
可以用for循环啊;
再来个if直到不为空为止;
不经脑子的随便一想;
貌似行得通;
但是作为严谨的程序猿;
认真思考这个不算方法的方法时候立马发现2个严重的问题;
  • 我只是想取上一篇文章;结果来了个for查询了NNNN次,严重浪费资源;
  • 假设现在一共10篇文章,第11篇就为空了,如果用for就会无限循环下去一直为空;
    如此来说;

果断是不能这样写了;
这时又有人在一旁大喊;
用limit不就可以了;
正解;
  1. SELECT * FROM article WHERE id<10 LIMIT 1;     #上一篇
  2. SELECT * FROM article WHERE id>10 LIMIT 1;     #下一篇
复制代码

这就完了吗?
NO;
如果用这sql取;
下一篇没问题了;
但是上一篇会一直是第一篇文章!
这时来个倒序即可;
  1. SELECT * FROM article WHERE id<10 ORDER BY id DESC LIMIT 1;     #上一篇
复制代码

转自 https://baijunyao.com/article/27

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|找我啊 ( 沪ICP备17031007号-2 )

GMT+8, 2019-10-24 13:23 , Processed in 0.049771 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表