去掉查询数据库重复数据
在开发过程中遇到一个,不知道什么原因连表查询的数据出现重复,使用了php自带函数array_unique()这个,无法实现我的需求,使用到返回的数据为null。
因此我需要找到一个办法去除查询到重复的数据,我想到两种方法。
第一种:
foreach循环将那查询到的数据for循环,当出现重复的id时候,我将这个数据只保留一次到一个空数组中,然后在html页面进行展示,这样感觉有些麻烦。
第二种:
我在网上找到tp3一个过滤重复数据的一个数据库自带函数distinct ( true );
index=
i
n
d
e
x
=
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