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