【发布时间】:2012-08-29 20:44:51
【问题描述】:
如何通过 Yii Active Record 找到数据库中一列的最大值?
我可以通过纯sql和createCommand方法来做,但是我想通过Active Record和CDbCriteria class来做。有什么办法吗?
【问题讨论】:
标签: php mysql activerecord yii max
如何通过 Yii Active Record 找到数据库中一列的最大值?
我可以通过纯sql和createCommand方法来做,但是我想通过Active Record和CDbCriteria class来做。有什么办法吗?
【问题讨论】:
标签: php mysql activerecord yii max
您需要按如下方式更改选择条件。
$model = new Model;
$criteria=new CDbCriteria;
$criteria->select='max(column) AS maxColumn';
$row = $model->model()->find($criteria);
$somevariable = $row['maxColumn'];
参考:
【讨论】:
这样可以避免创建不必要的临时对象:
$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();
【讨论】:
您可以通过 DESC 例如限制结果和顺序
$criteria = new CDbCriteria;
$criteria->order = 'column DESC';
$row = Model::model()->find($criteria);
$somevariable = $row->column;
【讨论】:
如果需要 WHERE 子句:
在控制器中:
$max = $model->getMax($filter);
在模型中:
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;
}
【讨论】:
$model = MyModel::model();
$maxId = $model->getCommandBuilder()
->createSqlCommand('SELECT MAX(id) FROM '.$model->tableName())
->queryScalar();
$maxId = Yii::app()->db
->createCommand('SELECT MAX(id) FROM '.$model->tableName())
->queryScalar();
【讨论】:
就是这样。
function getMaxId( $modelName ){
$criteria = new CDbCriteria;
$criteria->order = 'id DESC';
$model = $modelName::model()->find( $criteria );
return $model->id;
}
【讨论】: