我有以下代码,我想要列数量的总和。我正在使用关系函数来连接两个表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',
));*
答案 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();
然后你也会得到正确的结果。我希望它可以帮助你解决问题。如果您还有任何问题 - 请随时提出。