union union all区别+使用场景

2019-07-21  本文已影响0人  swoft_

使用场景

场景说明:

  1. 首页消息提醒需要对多个表数据进行统计。
  2. 根据用户角色进行区分,如果不存在相应的权限不统计。
$sql = 'select 1 as d_key ';
if (in_array('权限码1', $codes)) {
    $key[] = 'key1';
    $sql .= " union all select count(*)  from `table1` as a  where channel=".GlobalUtil::$channel." and status=".OrderService::audit_pass_one;
}
if (in_array('权限码2', $codes)) {
    $key[] = 'key2';
    $sql .= " union all select count(*)  from `table2` as b  where channel=".GlobalUtil::$channel." and status=".OrderService::audit_pass_two;
}
if (in_array('权限码3', $codes)) {
    $key[] = 'key3';
    $sql .= " union all select count(*) from `table3` where channel=".GlobalUtil::$channel." and status=".SellFianceService::settlement_status_1;
}
if (in_array('权限码4', $codes)) {
    $key[] = 'key4';
    $sql .= " union all select count(*)  from `table4` where channel=".GlobalUtil::$channel." and status=".SellFianceService::settlement_status_3;
}
$res_data  = [];
$db_res    = DB::select($sql);
foreach ($db_res as $k => $item){
    if($k == 0) continue; //去除第一个默认值
    $res_data[$key[$k - 1]] = $item->d_key;
}
return $res_data;

//如果使用union如果存在相同数据会去重。所以一定要使用union all

区别

UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。

2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。

UNION 去重且排序
UNION ALL 不去重不排序

上一篇 下一篇

猜你喜欢

热点阅读