快速发布收录 免费推广展示
晚上好, 游客 <游客> [ 马上登录 | 注册帐号 ]
首页 技术交流 正文

thinkphp5 随机从数据库取几条数据 随机排序 高效方法

时间:2022-12-19 10:30 作者: 18793网站目录导航 阅读:1191 次

随机从数据库抽取数据的方法有很多,可以用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

共收录0个网站,0个公众号,0个小程序,0个资讯文章,0个微信文章
首页 关于我们 联系我们 收录标准 广告合作 免责声明 友情链接
点击收藏小提示:按键盘CTRL+D也能收藏哦!
网站声明:本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,不承担任何责任。在此特别感谢您对分类目录网的支持与厚爱!
版权所有©(2015-2023)18793.CC All Rights Reserved.   浙ICP备2022030117号-1