2016-05-30 64 views
0

我有這樣的代碼,這是顯示所有的日常取消訂閱用戶..如何在yii中的cdbCriteria中使用SUM?

public function getdailyUnSubs($modelName,$op){ 

    $currentDate = date('Ymd'); 
    $criteria = new CDbCriteria; 
    $criteria->select = 'app_unsubs,sms_unsubs'; 

    $criteria->order = 'date DESC'; 
    $criteria->limit = 1; 
    $criteria->offset = 0; 
    $Subscriber = $modelName::model()->find($criteria); 

    $totalunSubs = $Subscriber['app_unsubs']+$Subscriber['sms_unsubs']; 

    return $totalunSubs; 
} 

,但現在我想所有的退訂用戶爲止。我想要所有未訂閱用戶的總和。

這是我的代碼,但它不工作。

public function getTotalUnSubs($modelName,$op){ 


    $criteria = new CDbCriteria; 
    $criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs'; 

    $Subscriber = $modelName::model()->find($criteria); 

    $totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs']; 

    return $totalunSubs; 
} 

跟它appunsubs並沒有定義smsunsubs

即使我的代碼更改爲

$criteria->select ='(sum(app_unsubs)+ sum(sms_unsubs)) as totalunsubs';

$totalunSubs = $Subscriber['totalunsubs'];

還在說totalunsubs是不確定的。

回答

2

您有未定義的appunsubssmsunsubs,因爲在您的$modelName模型類中沒有類似的字段。要提取數據,您可以根據條件創建查詢並使用Yii::app()->db->createCommand($sql)->queryRow()執行此查詢。看看這個代碼:

public function getTotalUnSubs($modelName,$op) 
{ 
    $criteria = new CDbCriteria; 
    $criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs'; 

    //creating proper SQL 
    $sql = Yii::app()->db->commandBuilder->createFindCommand($modelName, $criteria)->getText(); 

    //fetching data based on created SQL stored in $sql variable 
    $Subscriber = Yii::app()->db->createCommand($sql)->queryRow(); 

    $totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs']; 

    return $totalunSubs; 
} 
+0

使用你的代碼後,它給我一個錯誤,並說'SubUsers'不存在。這是我的桌子的名字。這個錯誤是在'$ sql = Yii :: app() - > db-> commandBuilder-> createFindCommand($ modelName,$ criteria) - > getText();' –

+0

嘗試檢查此代碼返回的內容:'Yii: :應用程序() - > DB->的getSchema() - > getTable( 'SubUsers')'。如果它返回'CDbTableSchema'對象,則將它傳遞給錯誤行,而不是'$ modelName'變量。 – aslawin

+0

我應該在哪裏放這段代碼? 'Yii :: app() - > db-> getSchema() - > getTable('SubUsers')' –

1

我認爲你必須設置集團通過到你的查詢。

所以代碼現在是這樣的。

public function getTotalUnSubs($modelName,$op){ 


    $criteria = new CDbCriteria; 
    $criteria->select ='sum(app_unsubs) as appunsubs, sum(sms_unsubs) as smsunsubs'; 
    $criteria->group='table primary key'; 

    $Subscriber = $modelName::model()->find($criteria); 

    $totalunSubs = $Subscriber['appunsubs']+$Subscriber['smsunsubs']; 

    return $totalunSubs; 
} 
+0

我的表沒有主鍵。它並不需要它 –