DataTables列替换问题:用第6列总和替换3、4列文本,求代码排查
问题分析与修复方案
首先,从你的需求和现有代码来看,主要遗漏了金额总和的计算逻辑以及将第3、4列替换为总和的字段映射这两个关键部分。
核心问题点
- 你的查询完全没有计算
amount列的总和,根本拿不到替换第3、4列所需的目标数据 - 当前
select语句里第3列是sales.reference_no、第4列是purchases.reference_no,完全没关联到金额总和的需求逻辑
修复后的代码示例
如果你的需求是让表格第3、4列都显示所有支付记录的总金额,可以用子查询获取全局总和,然后替换原来的第3、4列字段:
$this->load->library('datatables'); // 先定义表前缀简化代码 $payments_table = $this->db->dbprefix('payments'); $sales_table = $this->db->dbprefix('sales'); $purchases_table = $this->db->dbprefix('purchases'); $this->datatables->select( "DATE_FORMAT({$payments_table}.date, '%Y-%m-%d %T') as date, " . "{$payments_table}.reference_no as payment_ref, " . // 第3列替换为全局总金额 "(SELECT SUM(amount) FROM {$payments_table}) as total_amount, " . // 第4列同样替换为全局总金额 "(SELECT SUM(amount) FROM {$payments_table}) as total_amount_dup, " . "paid_by, amount, type, {$payments_table}.id as id" ) ->from('payments') ->join('sales', "{$payments_table}.sale_id={$sales_table}.id", 'left') ->join('purchases', "{$payments_table}.purchase_id={$purchases_table}.id", 'left'); // 全局总和不需要按单条payment分组,所以可以去掉原来的group_by
补充说明
如果你要的不是全局总和,而是按某个维度分组的金额总和(比如按支付日期、支付方式分组),那需要调整SUM()的分组逻辑,举个按日期分组求和的例子:
$this->datatables->select( "DATE_FORMAT({$payments_table}.date, '%Y-%m-%d') as date, " . "{$payments_table}.reference_no as payment_ref, " . "SUM({$payments_table}.amount) as daily_total, " . "SUM({$payments_table}.amount) as daily_total_dup, " . "paid_by, amount, type, {$payments_table}.id as id" ) ->from('payments') ->join('sales', "{$payments_table}.sale_id={$sales_table}.id", 'left') ->join('purchases', "{$payments_table}.purchase_id={$purchases_table}.id", 'left') ->group_by("DATE_FORMAT({$payments_table}.date, '%Y-%m-%d')");
这样第3、4列就会显示对应分组的金额总和了。
内容的提问来源于stack exchange,提问作者Inkus
相关产品推荐
相关产品推荐

