使用CActiveRecord获得列的总和

问题描述:

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

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

试试吧

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

在模式应该是当前场内总和