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有断档的时候,可能会出现少几篇文章的现象... 没做额外处理(其实是还没想好怎么弄)
转载请注明:鸟儿博客 » 一种比较节省资源的随机文章获取方法