在MySQL数据库里用一个SQL语句取得本条记录及其上一条和下一条记录

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

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

现 在,我们来看看我们的思维。我们是要根据已知ID来找上一条和下一条的,也就是在数据库里相邻的三条记录,
中间那一条是确定的。那既然ID有可能不连续, 那我们就用>和<运算符来吧(要是LIMIT支持负值就没这么麻烦了……)。
嗯,取到本条记录好说(为了方便说明,我们假设已知记录的id为 123吧)。SQL语句如下

取到本条记录的SQL
	
SELECT*FROM`XXX`WHERE`id`=123
 那,取得它的下一条呢?我们可以用`id`>123作为条件。可是在数据库里`id`大于123的数据可能不止一条,
那就用LIMIT吧。

取到已知记录的下一条记录:
	
SELECT * FROM `XXX` WHERE `id` > 123 LIMIT 1

当然,你要写LIMIT 0,1我也没有意见~

那要取到上一条呢?用`id`<123 LIMIT 1吗?不可能的~取到的一定是第一条。那要取到最后一条呢?
(台下有个小声音说:用排序~~~)对!
	
SELECT * FROM `XXX` WHERE `id`<123 ORDER BY `id` DESC LIMIT 1



看看是不是最后一条了呢?好,那我们把SQL语句合并一下,嗯,本条和下条好的好合并,代码如下
	
SELECT * FROM `XXX` WHERE `id` >=123 LIMIT 2

 那要加上上一条记录呢?不要忘了我们的MySQL里还有一个UNION函数哦~~不知道的童鞋们可以去看看手册。
为了防止记录顺序错乱,我们把每条SQL里都加上排序吧。总结后的代码就出来了:
	
(SELECT*FROM`XXX`WHERE`id`<123ORDERBY`id`DESCLIMIT 1)
UNION
(SELECT*FROM`XXX`WHERE`id`>=123ORDERBY`id`ASCLIMIT 2)


 再顺便说点吧,排序字段也不一定要是`id`,可以是你数据库表里有的任何字段,但最好是不要有重复的哟。

需要注意的是,两个SELECT语句里的ORDER BY都要用相同的字段,并且一个是升序一个是降序,
不要弄成一样的哦~赶快实验吧!!!




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。