如何在yii中获取mysql中的列的总和

时间:2017-04-27 04:38:53

标签: mysql yii

我有以下代码,我想要列数量的总和。我正在使用关系函数来连接两个表bd_master和bd_details。没有显示错误但是唯一选择的总和金额字段不存在。

*$subQuery = BdMaster::model()->find(array('select'=>'id','condition'=>'is_default=1'));
    $bDetails = BdMaster::model()->findAll(array(
                    'condition' => "t.id in ($subQuery->id) and bd_details.period <=LAST_DAY('2016-01-01') and bd_details.period >LAST_DAY('2016-01-01' - INTERVAL 1 MONTH)",
                    'with'=>array('bd_details'),
                    'select'=> 'SUM(bd_details.amount) as sm',
                    ));* 

1 个答案:

答案 0 :(得分:1)

问题是,函数findAll()会返回模型类。如果你想从数据库中得到总和,你应该build the query(没有模型)。

不同之处在于Query Builder有另一种语法。使用上面的链接获取确切的文档。您要构建的查询可能如下所示:

$subQuery = BdMaster::model()->find(array('select'=>'id','condition'=>'is_default=1'));
$sum = Yii::app()->db->createCommand()
    ->select('SUM(bd_details.amount) as sm')
    ->from('bdMaster t')
    ->join('bd_details', 't.id=bd_details.bdMaster_id') // here the correct join condition
    ->where("t.id in ($subQuery->id) and bd_details.period <=LAST_DAY('2016-01-01') and bd_details.period >LAST_DAY('2016-01-01' - INTERVAL 1 MONTH)")
    ->queryScalar();

您应该调整连接条件,然后查询应该正常工作。

queryScalar()会返回您的号码,因此您将获得该列的总和。

另一种可能性是使用SQL构建查询(我实际上更喜欢它而不是使用查询构建器构建)。如果您已经拥有可以为您提供正确结果的SQL,只需将其放在变量中,如下所示:

$sql = "your SQL here";
$sum = Yii::app()->db->createCommand($sql)->queryScalar();

然后你也会得到正确的结果。我希望它可以帮助你解决问题。如果您还有任何问题 - 请随时提出。