zblogphp随机显示文章的教程

最近几次上架新主题的时候都被驳回了,原因是zblog博客已经全面禁止利有“rand()”函数进行提取,不让使用rand()原因就是:在数据库数据比较多的情况下速度会变得很慢。

php.jpg

引用官网解释

1.不支持MySQL之外的数据库;

2. 数据量上万即奇慢无比。

所以,除非特殊情况,zblog博客今后不再允许代码含直接在数据库内rand()的应用通过审核。当然,不包含在PHP里用rand()或mt_rand()函数,也不包含Math.random()。

为什么会慢?我这里尝试用非计算机专业术语来解释。

我们把一本书比作数据库。一般的数据库查询,比如查一条ID为1的记录,一般会直接根据索引来得到结果。索引的用途,相当于一本书的目录。直接查目录得到结果,自然会比一页一页翻来得快。然而,ORDER BY RAND()呢?它会先给你这本书的每一页都随机写一个数字,这就要翻过每一页了。接着,再排序比大小,把每一页的数字都排序排一遍,这就又要把书翻一遍。再取出数字最小的那几条记录。所以,这就是慢的原因。(当然,MySQL的内部实现我没看过,这两个任务不一定是互相独立的。)如果要比较专业解释的话,请参看MySQL的官方文档:

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. However, you can retrieve rows in random order like this:

mysql> SELECT * FROM tbl_name ORDER BY RAND();ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows:

mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000;RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers on demand that is portable between platforms for the same MySQL version.

以上就是解释,不明觉厉啊,无论是计算机专业术语还是mysql官网文档的解释我都不明白,不过明不明白不要紧,要紧的是你必须的修改,否则就别想通过审核,于是乎,鸟儿的随机显示就横空出世,随机的主体思路:

鸟儿随机显示代码

1、先查出post表中,log_ID的最大值和最小值。

2、获取一个随机数,在最大值和最小值之间。

3、用这个随机数去查表。

代码如下

PHP

function 模板ID_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;}

可以说是解决了燃眉之急,但是(就这对了,哪有那么完美啊)就是当你的文章ID有断档的时候,可能会出现少几篇文章的现象,这个倒是可以解决的啊,毕竟zblog应用中心就插件,可以修改连续ID又不会影响已经存在的ID,这个就完美啦。

问题可以解决,可是不是谁都愿意使用插件的啊,于是继续寻找,偶然间看到飞鸟博客提供了一种方法:

飞鸟随机原理

1、先从数据库中提出一部份数据,加入数组中;

2、随机抽取数组中的数据,并显示。

代码如下

PHP

function 模板ID_rand($num){
    global $zbp,$str,$order;$i;
    $i = $num;
    $str = '';
    $arr = array();
    $arand = array();related->Title}</a></li>";
    }
    return $str;}






0

推荐

  • QQ空间

  • 新浪微博

  • 人人网

  • 豆瓣

取消
  • 首页
  • 电话
  • 留言
  • 位置
  • 会员