ZBlog PHP版本的随机文章获取方法,当然也可以是随机tag等等,稍作修改即可。
一直以来ZBP官方没有给出太给力的随机算法,网上找了一些,参考其他人写的似乎也都效率不高,鸟儿博客目前大概有700篇文章,算是个小数字,即便如此,如果使用rand这样的函数进行随机查询数据库时,速度也慢的惊人。
主体思路:
1、先查出post表中,log_ID的最大值和最小值。
2、获取一个随机数,在最大值和最小值之间。
3、用这个随机数去查表。
代码如下
function Nobird_Theme_Get_Rand(){ global $zbp,$str,$order; $str=''; $sql = $zbp->db->sql->Select( $zbp->table['Post'], array("MIN(log_ID)","MAX(log_ID)"), array( array('=', 'log_Type', '0'), array('=', 'log_Status', '0'), ), array('log_PostTime' => 'ASC'), null, null ); $array = $zbp->db->Query($sql); $i=mt_rand($array[0]["MIN(log_ID)"],$array[0]["MAX(log_ID)"]); $order = ''; $where = array( array('=','log_Status','0'), array('>','log_ID',$i) ); $array = $zbp->GetArticleList(array('*'),$where,$order,array(5),''); foreach ($array as $key=>$article) { if($key>5){ break; } $str .='<li><a href="'.$article->Url.'">'.$article->Title.'</a></li>'; } return $str; }
这个方法有个小bug,就是当你的log_ID有断档的时候,可能会出现少几篇文章的现象... 没做额外处理(其实是还没想好怎么弄)
转载请注明:鸟儿博客 » 一种比较节省资源的随机文章获取方法