tp5 高效率随机抽取数据(不重复)

北京网站建设中,最近又做到商城网站中,有客户提出需求,需要在产品的详情页添加几个推荐商品,这里的数据是随机数据库调取,于是想到需要一个随机抽取数据。

//随机抽取数据 (请事先导入use think\Db; 不清楚的看文档。)

public function getRandTable(){
     $num = 5;    //需要抽取的默认条数
     $table = 't_marclog';    //需要抽取的数据表
     $countcus = Db::name($table)->count();    //获取总记录数
     $min = Db::name($table)->min('id');    //统计某个字段最小数据
     if($countcus < $num){$num = $countcus;}
     $i = 1;
     $flag = 0;
     $ary = array();
     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('id','in',$ary,'or')->select();
     $this->assign('list', $list);
 }

通过如上步骤,即可获得一组随机的数据。希望在大家在以后的网站建设中能够用到。

2017-12-03

0 个评论