1、使用缓存分别获取两张表的数据,然后采用数组分页的方式
$list = Cache::getOrSet("wx_mini_user_reward_exchange_log_" . $preTime . '_' . $map['region'] . '_' . $type, function () use ($preTime, $filter) {
return $list = $this->UserRewardLog()->setTableName($preTime, false)->setDb($this->db)->where($filter)
->field('*')->order('use_time desc')->select();
}, $this->duration, true);
if($time != $preTime){
$list1 = Cache::getOrSet("wx_mini_user_reward_exchange_log_" . $time . '_' . $map['region'] . '_' . $type, function () use ($time, $filter) {
return $list1 = $this->UserRewardLog()->setTableName($time, false)->setDb($this->db)->where($filter)
->field('*')->order('use_time desc')->select();
}, $this->duration, true);
$list = array_merge($list, $list1);
}
//翻页
$page['totalCount'] = count($list);//总条数
$pageSize = $export == 1 ? count($list) : $pageSize;
$page['totalPage'] = ceil($page['totalCount'] / $pageSize);//总页数
$offset = ($currentPage - 1) * $pageSize;
$page['list'] = array_slice($list, $offset, $pageSize) ?: [];
foreach ($page['list'] as $key => &$item) {
if (!is_array($item))
$item = $item->toArray();
$number = $item['prop_type'] == 101 ? $item['number'] / 100 : (int)$item['number'];
$page['list'][$key]['give_time'] = $item['get_time'] ? date('Y-m-d H:i:s', $item['get_time']) : '';
$page['list'][$key]['use_time'] = $item['use_time'] ? date('Y-m-d H:i:s', $item['use_time']) : '';
$page['list'][$key]['price'] = $number . $item['unit'];
$page['list'][$key]['prop_name'] = $item['prop_name'] . "(" . $item['prop_id'] . ")";
$page['list'][$key]['state_name'] = $item['prop_type'] == 102 ? $this->master[$item['reward_state']] : $this->state[$item['reward_state']];
}
return $page;
2、使用子查询
if($time != $preTime){
$preSql = $this->UserRewardLog()->setTableName($time, false)->setDb($this->db)->where($filter)->fetchSql(true)
->field('*')->order('use_time desc')->select();
$sql = $this->UserRewardLog()->setTableName($time, false)->setDb($this->db)->where($filter)->field('COUNT(1) AS totalCount')->fetchSql(true)->select();
$totalCount = $this->UserRewardLog()->setTableName($preTime, false)->setDb($this->db)->where($filter)->field('COUNT(1) AS totalCount')
->union($sql,true)->select();
$count = 0;
foreach ($totalCount as $c){
$count += $c->totalCount;
}
$list['totalCount'] = $count;
$pageSize = $export == 1 ? $list['totalCount'] : $pageSize;
$list['list'] = $this->UserRewardLog()->setTableName($preTime, false)->setDb($this->db)->where($filter)->page($currentPage,$pageSize)->union($preSql,true)
->field('*')->order('use_time desc')->select();
}else{
$list['totalCount'] = $this->UserRewardLog()->setTableName($preTime, false)->setDb($this->db)->where($filter)->count();
$pageSize = $export == 1 ? $list['totalCount'] : $pageSize;
$list['list'] = $this->UserRewardLog()->setTableName($preTime, false)->setDb($this->db)
->where($filter)->page($currentPage,$pageSize)
->field('*')->order('use_time desc')->select();
}
注:本人使用tp5框架操作,设置表名方法已封装过
获取表名的封装方法:
/**
* 获取表名
* @param $name
* @param bool $needHash
* @return $this
*/
public function setTableName($name, $needHash = true)
{
$this->table = $this->preTable . '_' . $this->getTableSub($name, $needHash);
$this->setTable($this->table);
return $this;
}
public function getTableSub($name, $needHash = true)
{
if ($this->partDebug) return 0;
if (!$needHash) return $name;
return hexdec(substr(md5($name), 4, 1)) & ($this->partMaxNum - 1);
}
/**
* 指定默认数据表名(含前缀)
* @access public
* @param string $table 表名
* @return $this
*/
public function setTable($table)
{
$this->table = $table;
return $this;
}