去掉查询数据库重复数据
在开发过程中遇到一个,不知道什么原因连表查询的数据出现重复,使用了php自带函数array_unique()这个,无法实现我的需求,使用到返回的数据为null。
因此我需要找到一个办法去除查询到重复的数据,我想到两种方法。
第一种:
foreach循环将那查询到的数据for循环,当出现重复的id时候,我将这个数据只保留一次到一个空数组中,然后在html页面进行展示,这样感觉有些麻烦。
第二种:
我在网上找到tp3一个过滤重复数据的一个数据库自带函数distinct ( true );
index=
index=select->distinct ( true )->where ( ‘parent_id=0’ )->field ( ‘index’ )->select ();//例子!
然后我在tp5也使用这个函数发现也可以过滤重复数据,代码如下:
$list = Db::name('Apply') ->alias("a") ->distinct ( true ) ->field("a.*,b.company_name,d.anchor_name") ->join("merchants b",'a.merchants_id=b.gl_merchants_id') ->join("home_class c",'a.status=c.id') ->join("anchor d",'a.zhu_phone=d.anchor_phone') ->where($map) ->order("a.apply_id desc") ->paginate($num,false,['query' => Request::instance()->param()]); $list->toArray(); foreach ($list as $k=>$v){ if($v['screen_class_id']=='0'){ $screen_class = '未绑定'; }else{ $screen_class = '绑定'; } if($v['goods_id_num']=='' || $v['goods_id_num']=='null'){ $v['goods_id_num'] = '0'; } // pre($);die; $live_status = Db::name('live') ->where(['room_id'=>$v['room_id']]) ->value('live_status'); if($v['is_shenhe']=='4' && $live_status=='2'){ $v['is_shenhe'] = '5'; } $live_id = Db::name('live') ->where(['room_id'=>$v['room_id']]) ->value('live_id'); $v['live_id'] = $live_id; $data = array(); $data = $v; $data['screen_class'] = $screen_class; $list->offsetSet($k,$data); }
个人建议使用第二种,效率高,不仅仅在开发效率还是在运行效率上。
END