querys query createcommand php mysql activerecord yii max

php - query - Usando Yii Active Record para encontrar el máximo de una columna



yii db query() (5)

Puede limitar el resultado y el orden por DESC, por ejemplo

$criteria = new CDbCriteria; $criteria->order = ''column DESC''; $row = Model::model()->find($criteria); $somevariable = $row->column;

¿Cómo puedo encontrar el valor máximo de una columna en la base de datos por Yii Active Record?

Puedo hacerlo mediante el método sql y createCommand puro, pero quiero hacerlo mediante Active Record y la CDbCriteria CDbCriteria. ¿Hay alguna forma de hacerlo?


Esto lo usé en caso de valor entero

$max = Yii::app()->db ->createCommand("SELECT MAX(TableCol) FROM tableName") ->where(''cond1=:cond1'', array('':cond1''=>$cond1)) ->andWhere(''cond2=:cond2'', array('':cond2''=>$cond2)) ->queryScalar();

O

Este caso lo usé en caso de dateTime

$maxAnsTime = Yii::app()->db ->createCommand("SELECT tableColumn FROM tableName ORDER BY tableColumn DESC LIMIT 1") ->where(''cond1=:cond1'', array('':cond1''=>$cond1)) ->queryRow();

$ max varible le dará el resultado máximo.

También puede usar el parámetro bind y poner la cláusula where en su createCommand.

También encontré que los registros activos yii no son las mejores cosas usadas para el conjunto de datos más grande.


Si necesita una cláusula WHERE:

En el controlador:

$max = $model->getMax($filter);

En modelo:

public $maxColumn = 0; public function getMax($filter = null) { /* Get max in column1 WHERE column2 = $filter */ $criteria = new CDbCriteria; $criteria->select = ''MAX(t.column1) as maxColumn''; $criteria->condition = ''t.column2 LIKE :parm''; $criteria->params = array('':parm''=>$filter); $tempmodel = $this->find($criteria); $max = $tempmodel[''maxColumn'']; return $max; }


Esto evita crear un objeto temporal innecesario:

$criteria = new CDbCriteria; $criteria->select = ''max(column)''; // additional where conditions, if you so wish $criteria->addColumnCondition(array(''published'' => 1)); $model = SomeModel::model(); $value = $model->commandBuilder->createFindCommand( $model->tableName(), $criteria)->queryScalar();