方式一:

这种方式不适合id不连续的方法:

  1. $data_start = date('Y-m-d 00:00:00',time());
  2. // $data_now = date('y-m-d H:i:s',time());
  3. // $list = Db::connect('xxx')->name('top_douyin')->where('update_time','>=',$data_start)->order('rand()')->limit(10)->select()->toArray();
  4. $num = 8; //需要抽取的默认条数
  5. $table = 'top_xxx'; //需要抽取的数据表
  6. $countcus = Db::connect('xxx')->name($table)->where('update_time',$data_start)->max('id'); //统计某个字段最大数据
  7. $min = Db::connect('xxx')->name($table)->where('update_time',$data_start)->min('id'); //统计某个字段最小数据
  8. // dump(777711,$countcus,$min);exit;
  9. $i = 1;
  10. $flag = 0;
  11. $ary = array();
  12. while($i<=$num){
  13. $rundnum = rand($min, $countcus);//抽取随机数
  14. // dump(777713,$rundnum,$min,$countcus);exit;
  15. if($flag != $rundnum){
  16. //过滤重复
  17. echo $rundnum.'<br>';
  18. if(!in_array($rundnum,$ary)){
  19. $ary[] = $rundnum;
  20. $flag = $rundnum;
  21. }else{
  22. // $i--;
  23. }
  24. $i++;
  25. }
  26. }
  27. dump(777714,$ary);
  28. // $list = Db::connect('xxx')->name($table)->where('id','in',$ary,'or')->column('title','id');
  29. // $list = Db::connect('xxx')->name($table)->where('id','in',$ary)->column('title','id');
  30. $list = Db::connect('xxx')->name($table)->where('id','in',$ary)->field('title,id')->select()->toArray();
  31. dump(777715,$list);exit;
  32. // return json_encode(['200'=>$list],JSON_UNESCAPED_UNICODE);
  33. return json_encode($list,JSON_UNESCAPED_UNICODE);

方式二:

  1. SELECT * FROM ny_top_douyin ORDER BY rand() LIMIT 6;
  2. // 随机获取6条数据
  3. $data = Db::name('xxx')
  4. ->orderRaw('rand()')
  5. ->limit(6)
  6. ->select();