一种比较节省资源的随机文章获取方法

ZBLOG教程 十五楼的鸟儿 2228浏览 2评论

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有断档的时候,可能会出现少几篇文章的现象... 没做额外处理(其实是还没想好怎么弄)

转载请注明:鸟儿博客 » 一种比较节省资源的随机文章获取方法

游客
发表我的评论 换个身份
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

等待大佬打赏中~