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

DataTables列替换问题:用第6列总和替换3、4列文本,求代码排查

问题分析与修复方案

首先,从你的需求和现有代码来看,主要遗漏了金额总和的计算逻辑以及将第3、4列替换为总和的字段映射这两个关键部分。

核心问题点

  1. 你的查询完全没有计算amount列的总和,根本拿不到替换第3、4列所需的目标数据
  2. 当前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:50