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

来源:互联网 发布:web前端软件环境 编辑:程序博客网 时间:2024/06/04 18:03

在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。这样便能完美的解决问题了。

0 0
原创粉丝点击