用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3427|回复: 1
收起左侧

[数据库] 关于 previous 和 next (相邻数据)的数据库操作方法

[复制链接]
发表于 2013-4-7 20:58:13 | 显示全部楼层 |阅读模式
很久没发帖了,今天正好被人问一个问题,就是关于一条记录的上一条和下一条的数据库操作方式的实现方案。
关于相邻记录的获取,肯定是依据order by 和 desc/asc来获取,这个地球人都知道,但在这个文章里,我想说的是使用 UNION ALL 读一次数据库把相邻数据得出的方式。
例句:
PHP复制代码
 
$sql = "(SELECT `itemid`,`title` FROM `news` WHERE `itemid` > '".$itemid."'  ORDER BY `itemid` LIMIT 1)
            UNION ALL
            (SELECT `itemid`,`title` FROM `news` WHERE `itemid` < '"
.$itemid."' ORDER BY `itemid` DESC LIMIT 1 )";
 
复制代码

以传入的参数 $itemid 为依据,一次就把相邻数据全部获得(避免两次读取)。如果需要多条, 可以控制LIMIT后面的数值.
在前端显示的时候,还需要做一个简单的判断。
例如,上例生成的结果 $result , 在使用前需用count()函数判断一下. 如果count()的结果等于2, 那么相邻的前后两条数据都有, foreach操作就可以.
如果count()的结果等于1, 需要以itemid为判断依据, 假如 $result[0]['itemid'] 大于 itemid , 那么就只有下一条, 反之就只有上一条.



评分

参与人数 1威望 +5 收起 理由
Hex + 5 赞一个!

查看全部评分

发表于 2013-4-11 19:35:36 | 显示全部楼层
这么好的文章没人顶!太不厚道了~~加分~~

本版积分规则