You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter中按Package ID统计指定条件支付成功订单数异常问题

问题解决:按Package ID(quiz_id)统计符合条件的订单数

原代码问题分析

你当前的查询硬编码了quiz_id = 1,所以不管显示哪个包,都会返回包1的订单数,这就是所有包显示相同数值的核心原因。同时原代码没有做分组统计,无法一次性获取多个quiz_id对应的订单数量。

解决方案步骤

1. 在QuizModel中添加分组统计方法

替换原固定查询,改为按quiz_id分组统计符合条件的订单数:

public function get_succeeded_order_counts() {
    // 选择quiz_id和对应订单数
    $this->db->select('quiz_id, COUNT(*) as order_count');
    // 筛选条件:支付成功且金额为50000.00
    $this->db->where('payment_status', 'succeeded');
    $this->db->where('item_price', 50000.00); // 用数值类型匹配数据库decimal字段更准确
    // 按quiz_id分组
    $this->db->group_by('quiz_id');
    // 返回结果数组
    return $this->db->get('payments')->result_array();
}

2. 控制器中处理统计数据

调用Model方法,将结果转为关联数组(方便视图快速查找对应包的统计数):

// 获取所有包的统计数据
$order_stats = $this->QuizModel->get_succeeded_order_counts();
// 转成以quiz_id为键、订单数为值的数组
$stats_map = array_column($order_stats, 'order_count', 'quiz_id');
// 传递给视图
$data['order_stats'] = $stats_map;
$this->load->view('你的视图文件名', $data);

3. 视图中显示对应包的订单数

假设当前包的quiz_id存储在变量$quiz_id中,直接匹配显示:

<?php 
// 存在对应统计数则显示,否则显示0
echo isset($order_stats[$quiz_id]) ? $order_stats[$quiz_id] : 0; 
?>

额外说明

  • 如果数据库中item_price是字符串类型,保留'50000.00'的字符串形式即可;如果是decimal/float类型,用数值50000.00能避免类型不匹配导致的查询错误。
  • 这种方式只需要查询一次数据库就能获取所有包的统计数据,比循环每个包单独查询更高效。

内容的提问来源于stack exchange,提问作者Immer M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:57:01