帝国cms随机调用文章

先看官方给出的方法:

先用php随机出信息ID,然后SQL调用用id in (php随机的ID列表),代码如下:

?php

$randnum=10; //随机数量

$randids='';

$randdh='';

for($i=1;$i<=$randnum;$i++)

{

$randids.=$randdh.rand(1,100000); //1为最小ID,100000为最大ID

$randdh=',';

}

?>

[e:loop={栏目ID,显示条数,操作类型,只显示有标题图片,"id in ($randids)"}]

模板代码内容

[/e:loop]

但是,如果id不连续的话,可能出现调用悲剧。

以下改进的方法,看似复杂,感觉笨戳,实际执行结果却意外高效可靠:

<?php
$sql="SELECT * FROM {$dbtbpre}ecms_news AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM {$dbtbpre}ecms_news )-(SELECT MIN(id) FROM {$dbtbpre}ecms_news))+(SELECT MIN(id)
FROM {$dbtbpre}ecms_news )) AS id2) AS t2 WHERE t1.id >= t2.id2 ORDER BY t1.id LIMIT 1";
$str="";
$rid=array();
$i=0;
while($i<10) {
	$nr= $empire->fetch1($sql);
	$titleurl=sys_ReturnBqTitleLink($nr);
	if(in_array($nr['id'], $rid)) {
	} else {
		$str=$str."<li><a href='".$titleurl."' title='".$nr['title']."'>".$nr['title']."</a></li> ";
		$rid[]=$nr['id'];
		$i=$i+1;
	}
}
echo $str;
?>

上述代码,随机调用10条信息,执行速度杠杠的,完全打破了随机调用耗时轻易别用的禁区。

特别注意下,t2的id重命名为id2是必须的,否则当表的id不连续的时候,会重蹈官方方法的覆辙。

同理,随机调用tagid的重点代码为:

SELECT *

FROM `phome_enewstags` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(tagid) FROM `phome_enewstags`)-(SELECT MIN(tagid) FROM `phome_enewstags`))+(SELECT MIN(tagid) FROM `phome_enewstags`)) AS tagid2) AS t2

WHERE t1.tagid >= t2.tagid2

ORDER BY t1.tagid limit 1

本文由网友投稿或聚码屋整理自网络,如转载请注明出处:https://www.ym3.net/2519.html

本站发布的内容若侵犯到您的权益,请邮件联系 cnzz8#outlook.com  删除,我们将及时处理!

本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。

本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。

若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。

 游客 发表评论

请先登录OR注册后评论

请先登录

还没有评论,快来说点什么吧~

返回顶部