记录一次有关于实现新闻下一篇功能的代码优化

在web开发中,经常会有一个需求需要实现,那就是下一篇。比如,当我们阅读某一篇新闻时,一般在新闻详情页末尾会有,下一篇,标题是XXX。

然而在实现这个功能的时候,我虽然实现了,但是确实一种效率非常低的方法,幸好有经理帮我指出错误,并为我提供了解决方法。


话不多说,先附上我的烂代码:

//实现下一篇功能
	$newslist = News::listNews('', 1, 99999999);
	//---获取id数组
	$newsidarr = array();
	foreach ($newslist as $key => $value) {
		$newsidarr[$key] = $value['id'];
	}
	//---获取下一篇id
	$nextid = 0;
	foreach ($newsidarr as $k => $v) {
			if($id == $v){
				if($k < (count($newsidarr)-1)){
					$nextid = $newsidarr[$k + 1];
				}
			}
	}
	//---获取下一篇信息
	if($nextid){
		$nextinfo = News::getNews($nextid); 
		$next = '<a href="news_info.php?id='.$nextid.'">下一篇: '.$nextinfo["title"].'</a>';
	}else{
		$next = '<a href="javascript:;" style="background-color:#bbb;">已经是最后一篇了</a>';
	}


这段代码虽然实现了功能,但是确实错误狠多。首先我在调用listNews方法的时候不应该用一串9来调取所有的新闻。因为还是存在多余这么多新闻的可能的。

第二个就是我的方法问题了。当我这样现获取所有的id做一个数组,然后跟当前id进行比对,获取下一篇新闻的id的方法是效率很低的,它不仅要去查一个表的所有数据获取id,还要把所有的id进行遍历再进行比对获取下一篇的id。当新闻很多的时候,这样的代码简直就是灾难。


优化方法:

因为新闻是按id排序的,所以我们可以写一个方法。将当前新闻id作为传入参数。然后select的时候查询比当前id大的id并加上limit 1,然后返回所查询到的id。这样便能完美的解决问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值