2011-04-21 37 views
7

1)有沒有辦法在Yii中使用CActiveRecord獲取整數列的總和?使用CActiveRecord獲得列的總和

否則,我將不得不獲取列數據並在服務器端進行彙總。

2)我還假設通過一個sql查詢獲取總和比獲取數據列並在服務器上使用php進行總結要快。如果性能很重要,那麼mysql服務器是否應該去做這樣的操作,或者讓php服務器來處理這個問題。

請提供建議。

+0

也許這個問題應該是如何爲列的DB總和查詢,而不是。 – Alocus 2011-04-22 02:47:00

+4

'$ sum = Yii :: app() - > db-> createCommand(「SELECT SUM('theColumnOfData')as'sum'FROM'theTableOfData'」) - > queryScalar();' – Alocus 2011-04-22 02:48:23

回答

10

1)我不這麼認爲,除非你想有一個STAT關係,否則用這種方式使用CAvtiveRecord並沒有什麼意義。假設你有一個「問題」模型和一個「答案」模型,答案屬於一個問題。你可以做一個統計關係,在「問題」實現這樣的:

Public function relations() { 
    return array(
     'answerSum'=>array(self::STAT, 'Answer', 'questionId', 'select' => 'SUM(answerSum.someFieldFromAnswerTableToSum)') 
    ); 
} 

然後您檢索信息:$ question-> answerSum; $ question是上面聲明的關係的一個問題實例。

2)這是數據量的問題。我個人會選擇SQL,因爲它能夠處理大量的數據集,從而可以保存未來。

+0

爲什麼它沒有感覺這種方式使用CActiveRecord?也許我應該執行一個SQL來彙總一列數據而不使用CActiveRecord? – Alocus 2011-04-22 02:33:56

+0

接受這個解決方案,因爲它指出ActiveRecord不應該以這種方式使用。然而,爲什麼會更好的進一步解釋。 – Alocus 2011-04-22 02:51:25

+0

我愛你的建議。我認爲你比我更瞭解我的應用程序。感謝您建議使用STAT。 – Alocus 2011-04-22 05:06:07

6

試試吧

$user = User::model()->findBySql('select sum(`you_column`) as `sum` from user', array()); 
var_dump($user->sum); 

在模式應該是當前場內總和