如何使用$ this-> db-> select_sum和$ this-> db-> group_by($ groupBy)方法获得求和

时间:2017-04-20 06:08:50

标签: php mysql codeigniter-2

我希望使用Codegniter框架将列的值分组为另一列。在名为action的模型上,我使用了这种方法:

public function read_sum_groupby($table, $column,$groupBy,$where=array()){
    $this->db->group_by($groupBy); 
    $this->db->where($where);
    $this->db->select_sum($column);
    $result = $this->db->get($table);

    return $result->result();
}

然后我在这个视图上调用了这个方法

$installment_discount = $this->action->read_sum_groupby("installment","discount","installment_id",array("loan_id"=>$loan->id));

然后我打印出这样的输出

<pre>
 <?php print_r($installment_discount); ?>    
</pre>

结果是

This is the Print_r result

你可以看到最后一个值是800,但我预期的是200。

我的桌子是

enter image description here

1 个答案:

答案 0 :(得分:0)

11,12,13,14行的installment_id都是7759702.所以如果你按照installment_id分组然后选择select_sum(discount),那么sql将是这样的:

SELECT sum(discount) FROM installment WHERE loan_id=1 GROUP BY installment_id;

11,12,13,14行的折扣总结,所以你得到800。

如果你想获得200,那么sql应该是这样的:

SELECT sum(distinct(discount)) FROM installment WHERE loan_id=1 GROUP BY installment_id;

您的代码可以这样写:

$this->db->select_sum("distinct($column)", $column);