2017-04-27 67 views
0

我有下面的代碼,我想要列數的總和。我正在使用關係函數來連接兩個表bd_master和bd_details。沒有錯誤顯示,但唯一選擇的總金額字段不存在。如何在yii中獲得mysql中列的總和

*$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

事情是,函數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(); 

那麼你也將得到正確的結果。我希望它能幫助你解決你的問題。如果您還有任何問題 - 請隨時提問。

+1

謝謝你真的爲我工作。此外,我希望後來感謝你指出。 – astrosixer