随机从数据库抽取数据的方法有很多,可以用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
版权免责声明: 本站内容部分来源于网络,请自行鉴定真假。如有侵权,违法,恶意广告,虚假欺骗行为等以上问题联系我们删除。
本文地址:https://18793.cc/index/article/view/13.html