欢迎访问WDPHP素材源码!今天是2024年04月17日 星期三,天亮要了!
您好,游客 [ 马上登录 | 注册帐号 | 微信登录 | QQ登录]
当前位置:首页 > 教程 > PHP教程 > 

thinkphp5 随机从数据库取几条数据 随机排序 高效方法
栏目分类:PHP教程    发布日期:2019-09-27    浏览次数:4961次     收藏

随机从数据库抽取数据的方法有很多,可以用Mysql的原生语句去抽取,也可以先用PHP随机数来抽取。这里WDPHP素材源码就分享一个速度非常快的thinkphp5随机查询数据库指定条数数据的方法。希望对其他小伙伴有帮助。此方法适用于数据表数据量特别大的情景下使用,小数据量可使用THINKPHP5 rand()排序方法

/**
 * 随机获取数据
 * WDPHP素材源码 http://www.wdphp.com
 * @param string $table    表名
 * @param string $where    查询条件
 * @param string $num  抽取条数
 * @return array 
 */
function getRandRecord($table,$where=[],$num=10){
	if(!$table) return false;
    $countcus = Db::name($table)->where($where)->count();    //获取总记录数
    $min = Db::name($table)->where($where)->min('id');    //统计某个字段最小数据
    if($countcus < $num){$num = $countcus;}
    $i = 1;
    $flag = 0;
    $ary = [];
	while($i<=$num){
		$rundnum = rand($min, $countcus);//抽取随机数
		if($flag != $rundnum){
			//过滤重复 
			if(!in_array($rundnum,$ary)){
				$ary[] = $rundnum;
				$flag = $rundnum;
			}else{
				$i--;
			}
			$i++;
		}
	}

    $list = Db::name($table)->where($where)->where('id','in',$ary)->select();
    return $list;
}

上面的代码中我们首先获取了数据库的最大记录数,然后在最小记录和最大记录中用PHP生成随机数之后,进行的查询。效率比起原生的Mysql查询要快很多,尤其对于数据量较大的场景。

如果数据表数据量较少,可以采用rand()方式:

THINKPHP5 rand()排序方法介绍:https://www.wdphp.com/detail/1601.html

源码 模板 特效 素材 资源 教程 站长