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

ZBLOG教程 十五楼的鸟儿 1992浏览 9评论

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,您需要填写昵称和邮箱!

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

网友最新评论 (9)

  1. 访客
    没有使用PHP版本
    筛宝 游客 2年前 (2015-10-20)回复
  2. 访客
    我说说我的看法吧,先获得文章数,比如有100篇文章,就获得100,然后创建一个数组,数组的大小与文章的篇数一样,然后把文章的ID一次循环赋值给数组,接着随机数组下标获取对应的文章ID,当然这里 要考虑的问题是,数组的下标会不会重复的问题了。
    笑看风云 游客 2年前 (2015-09-08)回复
  3. 访客
    给个思路 缓存所有文章id和标题等要调用的数据 再随机
    访客 游客 2年前 (2015-08-10)回复
  4. 访客
    非常棒的内容,值得收藏
    匿名 游客 3年前 (2014-10-14)回复
  5. 访客
    mt_rand()比rand()好是吧,那以后就用mt_rand()了。呵呵。
    雨夜 游客 3年前 (2014-09-12)回复

等待大佬打赏中~