thinkphp5 随机从数据库取几条数据 随机排序 高效方法
随机从数据库抽取数据的方法有很多,可以用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
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码