2011-04-21 17 views
7

1) ¿Hay alguna manera de obtener la suma de una columna entera usando CActiveRecord en Yii?Use CActiveRecord para obtener la suma de una columna

De lo contrario, tendré que obtener los datos de la columna y resumirlos en el lado del servidor.

2) También asumo que obtener la suma a través de una consulta sql es más rápido que obtener la columna de datos y resumirla en el servidor con php. Si el rendimiento es importante, el servidor mysql debe molestarse en realizar dicha operación o simplemente dejar que el servidor php se encargue de esto.

Por favor amablemente un consejo.

+0

Quizás la pregunta debería ser cómo consultar la suma de una columna en la base de datos en su lugar. – Alocus

+4

'$ sum = Yii :: app() -> db-> createCommand (" SELECT SUM ('theColumnOfData') como 'sum' FROM 'theTableOfData' ") -> queryScalar();' – Alocus

Respuesta

10

1) No lo creo, y realmente no tiene sentido usar CAvtiveRecord de esa manera, a menos que desee tener una relación STAT. Supongamos que tiene un modelo de "Pregunta" y un modelo de "Respuesta" y que las respuestas pertenecen a una pregunta. Se podría hacer una relación estadística y ponerlo en práctica en "pregunta" de esta manera:

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

A continuación, recuperar la información: $ question-> answerSum; donde $ pregunta es una instancia de la pregunta con las relaciones declaradas como arriba.

2) Se trata de la cantidad de datos. Personalmente, elegiría SQL, porque es capaz de manejar una mayor cantidad de conjuntos de datos y, por lo tanto, ahorrar en el futuro.

+0

¿Por qué no lo hace? sentido para usar CActiveRecord de esta manera? quizás debería simplemente ejecutar un sql para sumar una columna de datos sin usar CActiveRecord? – Alocus

+0

Aceptando esto como la solución, ya que señala que ActiveRecord no se debe utilizar de esa manera. Sin embargo, más explicaciones sobre por qué sería bueno. – Alocus

+0

Me encanta tu sugerencia. Creo que sabes mi aplicación más que yo. Gracias por sugerir el uso de STAT. – Alocus

6

Pruébalo

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

En el modelo debe estar presente suma campo

Cuestiones relacionadas