首页 > 其他 > 网站日记>正文

帝国cms随机调用文章或者tags

提示: 阅读权限:登录可见  

先看官方给出的方法:

先用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

此处隐藏297个字。

登录可见

$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

 

上一篇:帝国cms栏目遍历

下一篇:帝国cms 之取标题图片的修改

tags: 帝国cms tags 帝国

返回首页

相关

热门

站内直通车

首页养生方剂 呼吸消化性病血液 外科妇科男科 口腔血管 鼻喉 眼科耳科儿科 分泌泌尿肝胆 肛肠骨科神经 呼吸皮肤肿瘤 其他象数医书
返回顶部