优化:Give_Gift 表查询处理
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
namespace app\adminapi\model;
|
||||
|
||||
use app\common\library\GiftTableManager;
|
||||
use think\Log;
|
||||
use think\Model;
|
||||
use think\Session;
|
||||
use think\Db;
|
||||
@@ -78,4 +80,102 @@ class Gift extends Model
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取送礼记录
|
||||
*/
|
||||
|
||||
public function getGiftRecords($search_time,$where,$page_array)
|
||||
{
|
||||
// 获取需要查询的表
|
||||
$tables = GiftTableManager::getTablesByTimeRange(
|
||||
$search_time[0],
|
||||
$search_time[1]
|
||||
);
|
||||
//数组排序fa_vs_give_gift_202601 表明数字大的排在前面
|
||||
arsort($tables);
|
||||
|
||||
$gift_count = 0;
|
||||
$gift_total_price = 0;
|
||||
$gift_number = 0;
|
||||
$all_lists = []; // 存储所有查询结果
|
||||
$remaining_page_offset = ($page_array['page'] - 1) * $page_array['page_limit']; // 需要跳过的记录数
|
||||
$collected_count = 0; // 已收集的记录数
|
||||
if($tables){
|
||||
foreach ($tables as $table) {
|
||||
$table_name = substr($table, 3);//截取可查询的表名
|
||||
|
||||
// 获取当前表的总记录数
|
||||
$count = db::name($table_name)->where($where)->count();
|
||||
|
||||
if($count > 0){
|
||||
// 如果还需要跳过记录
|
||||
if($remaining_page_offset > 0){
|
||||
// 如果当前表的记录数大于需要跳过的记录数
|
||||
if($count > $remaining_page_offset){
|
||||
// 从当前表中获取所需数据,跳过前面的记录
|
||||
$table_lists = db::name($table_name)
|
||||
->where($where)
|
||||
->order('createtime', 'desc')
|
||||
->limit($remaining_page_offset, $page_array['page_limit'])
|
||||
->select();
|
||||
|
||||
// 添加到结果中
|
||||
foreach($table_lists as $item){
|
||||
if($collected_count < $page_array['page_limit']){
|
||||
$all_lists[] = $item;
|
||||
$collected_count++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$remaining_page_offset = 0; // 已经跳过所需的记录
|
||||
} else {
|
||||
// 当前表的所有记录都需要跳过
|
||||
$remaining_page_offset -= $count;
|
||||
}
|
||||
} else if($collected_count < $page_array['page_limit']) {
|
||||
// 如果不需要跳过记录,且还没有收集足够的数据
|
||||
$remaining_needed = $page_array['page_limit'] - $collected_count;
|
||||
|
||||
// 从当前表获取剩余所需的数据
|
||||
$table_lists = db::name($table_name)
|
||||
->where($where)
|
||||
->order('createtime', 'desc')
|
||||
->limit($remaining_needed)
|
||||
->select();
|
||||
|
||||
// 添加到结果中
|
||||
foreach($table_lists as $item){
|
||||
if($collected_count < $page_array['page_limit']){
|
||||
$all_lists[] = $item;
|
||||
$collected_count++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$total_price = db::name($table_name)->where($where)->sum('total_price');
|
||||
$number = db::name($table_name)->where($where)->sum('number');
|
||||
$gift_count += $count;
|
||||
$gift_total_price += $total_price;
|
||||
$gift_number += $number;
|
||||
|
||||
// 如果已经收集到足够数据,跳出循环
|
||||
if($collected_count >= $page_array['page_limit']){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$result = [
|
||||
'lists' => $all_lists,
|
||||
'count' => $gift_count,
|
||||
'total_price' => $gift_total_price,
|
||||
'number' => $gift_number,
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user