mysql上下篇文章,相邻三条数据

在做文章页面时,有时候需要在文章下面显示出上一条和下一条记录。如果简单地使用id值加1和减1的方法来做会有缺陷。 各位看官请试想,如果我们删除了中间的某一条和某几条记录呢?那不是取不出来了?

所以,思想是很重要的,嗯。举个例子吧,比如说我有一个名叫XXX的表,里面有唯一的id字段。然后,里面有N条数据呢~~~

现 在,我们来看看我们的思维。我们是要根据已知ID来找上一条和下一条的,也就是在数据库里相邻的三条记录, 中间那一条是确定的。那既然ID有可能不连续, 那我们就用>和<运算符来吧(要是LIMIT支持负值就没这么麻烦了……)。

嗯,取到本条记录好说(为了方便说明,我们假设已知记录的id为 123吧)。

SQL语句如下 取到本条记录的

 SELECT * FROM `t_kol_article` WHERE `id` =18

那,取得它的下一条呢?我们可以用`id`>123作为条件。可是在数据库里`id`大于123的数据可能不止一条, 那就用LIMIT吧。 取到已知记录的下一条记录:

 SELECT * FROM `t_kol_article` WHERE `id` =18 LIMIT 1

当然,你要写LIMIT 0,1我也没有意见~ 那要取到上一条呢?用`id`<123 LIMIT 1吗?不可能的~取到的一定是第一条。

那要取到最后一条呢? (台下有个小声音说:用排序~~~)对!

SELECT * FROM `t_kol_article` WHERE `id`<18 ORDER BY `id` DESC LIMIT 1 

看看是不是最后一条了呢?好,那我们把SQL语句合并一下,嗯,本条和下条好的好合并,代码如下

SELECT * FROM `t_kol_article` WHERE `id`<18 LIMIT 2   

那要加上上一条记录呢?不要忘了我们的MySQL里还有一个UNION函数哦~~不知道的童鞋们可以去看看手册。

为了防止记录顺序错乱,我们把每条SQL里都加上排序吧。总结后的代码就出来了:

(SELECT * FROM `t_kol_article` WHERE `id`<18 ORDER BY `id` DESC LIMIT 1)
UNION
(SELECT * FROM `t_kol_article` WHERE `id`>=18 ORDER BY `id` ASC LIMIT 2)

再顺便说点吧,排序字段也不一定要是`id`,可以是你数据库表里有的任何字段,但最好是不要有重复的哟。 需要注意的是,两个SELECT语句里的ORDER BY都要用相同的字段,并且一个是升序一个是降序, 不要弄成一样的哦~赶快实验吧!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值