有时候我们需要去获取数据表中随机条数据用于展示,比如新闻推荐、人员推荐等
1 /** 2 * 获取随机列表 3 * @param $num 获取的记录数 4 * @param array $map 筛选条件 5 * @param string $key 主键id 6 * @return mixed 7 */ 8 public function randomDataList($num, $map = [], $key = 'id'){ 9 # 获取到所有满足条件的 key 10 $ids = $this->where($map)->group($key)->getField($key, true); 11 if (count($ids) > $num){ 12 $arr = []; 13 # 获取到随机数组 14 $keys = array_rand($ids,$num); 15 foreach ($keys as $v){ 16 $arr[] = $ids[$v]; 17 } 18 # 再次构造查询条件 19 if(empty($arr)){ 20 return []; 21 } else { 22 $map= [$key => ['IN', $arr]]; 23 } 24 $moreData = $this->where($map)->limit($num)->select(); 25 } else { 26 $moreData = $this->where($map)->limit($num)->select(); 27 } 28 return $moreData; 29 }