在做文章页面时,有时候需要在文章下面显示出上一条和下一条记录。如果简单地使用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都要用相同的字段,并且一个是升序一个是降序, 不要弄成一样的哦~赶快实验吧!!!