由於我服務器配置比較差,所以利用sql的rand()來隨機肯定不行,太慢了,所以我轉換思路,先建張表,字段分兩個,一個是文章id一個欄目id,再通過這個表來進行區域性隨機,這樣就可以把隨機高效率實現了,但是這樣有個問題,用sql不靠譜,所以我寫了一個PHP代碼,經過測試,首頁能在兩秒內加載出來,但是老是隨機不好,所以我又用了我的緩存插件來對頁面進行固定....這都是後事了
<?php
$file_cache = "./news.json";
//緩存整個news表的數據
if(!file_exists($file_cache) || time()-filemtime($file_cache)>86400){
//查詢分類
$hm_class=$empire->query("select classid from {$dbtbpre}enewsclass");
while($hm_r=$empire->fetch($hm_class))
{
//查詢分類下面的所有id
$hm_news=$empire->query("SELECT id FROM `{$dbtbpre}ecms_news` WHERE `classid` = {$hm_r[classid]}");
while($hm_nr=$empire->fetch($hm_news))
{
$news_data[$hm_r['classid']][] = $hm_nr[id];
}
}
file_put_contents($file_cache,json_encode($news_data));
}
//獲取緩存數據表
$file_arrs = json_decode(file_get_contents($file_cache),true);
//根據數據表獲取id
foreach($file_arrs as $k=>$v){
//增加變量
for ($rani=1; $rani<=30; $rani++){
$rand_id.= $v[mt_rand(0,count($v)-1)].",";
}
$rand_id = rtrim($rand_id,",");
$rand_data[] = $rand_id;
$rand_id = "";
$rani=1;
}
?>寫了兩天,想來想去,最後測試了很久,才寫成這樣,如果服務器配置還是太小了,可以嘗試將緩存文件給切分來調用,當然,這就需要你們再次而開了。
代碼使用,先在首頁模板最上面把PHP代碼放上去,接下來就可以直接萬能標籤調用了
[ecmsinfo]1,20,32,1,0,13,0,"id in ($rand_data[0])"[/ecmsinfo]
[ecmsinfo]2,20,32,1,0,13,0,"id in ($rand_data[1])"[/ecmsinfo]
[ecmsinfo]3,20,32,1,0,13,0,"id in ($rand_data[2])"[/ecmsinfo]比如這樣調用,不懂PHP的,就先了解一下PHP語法先。可以找我改進代碼哦!