2017-04-27 13 views
0

私は次のコードを持っています。列の量の合計が必要です。私は2つのテーブル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(モデルなし)にする必要があります。

違いは、クエリビルダには別の構文があります。正確な文書については上記のリンクを使用してください。構築するクエリは、おそらく次のようになります。

$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()は、数値を返すので、列の合計が得られます。

もう1つの可能性は、SQLを使用してクエリを作成することです(私は実際にクエリビルダーを使用してビルドするよりもそれを好む)。正しい結果が得られるSQLをすでに持っている場合は、次のように変数を入れてください。

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

正しい結果が得られます。私はそれがあなたの問題を助けてくれることを願っています。まだ質問がある場合はお気軽にお問い合わせください。

+1

本当にありがとうございました。また、私は後でそれを指摘していただきありがとうございます。 – astrosixer

関連する問題