自己写的高性能获取随机帖子代码,分享给大家,不足之处请高手指点!为什么不直接用MySQL语句,据我测试发现兼容性不好,不知道是否我MySQL配置问题。如果您有更好的方法请多指!
代码如下:
function get_rand_thread($num = 20, $cond = array()){
global $db,$forumlist_show;
$tablepre = $db->tablepre;
$fids = arrlist_values($forumlist_show, 'fid');
$cond['fid'] = $fids;
$condsql = db_cond_to_sqladd($cond);
$maxmincount = db_sql_find_one("SELECT MAX(tid), MIN(tid), COUNT(*) FROM {$tablepre}thread {$condsql}");
list($max, $min, $count) = array_values($maxmincount);
if($count <= $num){
//符合条件的数据比指定的数据还少,直接全部读取吧,打散一下
$sql = "SELECT * FROM {$tablepre}thread {$condsql}";
$threads = db_sql_find($sql);
shuffle($threads);
} else {
//随机读取帖子,万一存在不符合条件的帖子,数量就少于$num个了,那继续读取,直到数量足够为止
$threads = array();
do {
$rndtids = array();
//生成随机tid,防止重复
for($i=$num;$i>0;$i--){
do {
$rand = rand($min, $max);
} while(in_array($rand, $rndtids));
$rndtids[] = $rand;
}
$cond['tid'] = $rndtids;
$condsql = db_cond_to_sqladd($cond);
$sql = "SELECT * FROM {$tablepre}thread {$condsql}";
$rndthreads = db_sql_find($sql);
$threads += $rndthreads;
} while(count($threads)<$num);
}
//数据格式化一下
if($threads) foreach ($threads as &$thread) thread_format($thread);
return $threads;
}
历史资源提醒--必看
该页面资源/教程来自原魔趣吧历史资源转移,因发布历史久远,部分资源/教程可能已失效或无法在最新版程序中安装使用!DZ资源建议在Discuz3.4及以下版本使用,PHP版本建议5.6。资源仅提供做代码研究学习使用!
因改版,部分贴内链接将无法正常跳转,如链接失效或未正常跳转,请利用站内搜索功能搜索资源名称获取对应资源!