php随机显示文章代码,zblogphp随机显示文章的教程

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

6cc04ed59271c3133a7da67fb021d42c.png

引用官网解释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 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、用这个随机数去查表。

代码如下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 .='

Url.'">'.$article->Title.'';

}

return $str;

}

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

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

飞鸟随机原理

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

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

代码如下function 模板ID_rand($num){

global $zbp,$str,$order;$i;

$i = $num;

$str = '';

$arr = array();

$arand = array();

$order = array('log_ViewNums'=>'ASC');

$where = array(array('=','log_Status','0'));

$array = $zbp->GetArticleList(array('*'),$where,$order,array(20),'');$arr = array_rand($array,$i);for($j=0;$j

foreach ($arand as $related) {

$str .= "

Url}\" title=\"{$related->Title}\" target=\"_blank\">{$related->Title}";

}

return $str;

}

代码中,使用的PHP中的array_rand()函数,用随机获取数组的键名,并不是数据。至于代码怎么样就看后期使用的效果了,目前来说还是可以的,有问题我会及时反馈的。。。撒由那拉!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值