php 使用 Yii Active Record 查找最多一列
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12186217/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using Yii Active Record to find max of one column
提问by Moein Hosseini
How can I find max value of one column in database by Yii Active Record?
如何通过 Yii Active Record 找到数据库中一列的最大值?
I can do it by pure sql and createCommandmethod,but I wanna do it by Active Record and CDbCriteriaclass.is there any way to do it?
我可以通过纯 sql 和createCommand方法来完成,但我想通过 Active Record 和CDbCriteria类来完成。有什么办法可以做到?
回答by Stephen305
You will want to change the select criteria as follows.
您需要按如下方式更改选择条件。
$model = new Model;
$criteria=new CDbCriteria;
$criteria->select='max(column) AS maxColumn';
$row = $model->model()->find($criteria);
$somevariable = $row['maxColumn'];
Reference:
参考:
回答by Martin Komara
This avoids creating an unnecessary temporary object:
这避免了创建不必要的临时对象:
$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();
回答by Josh
You can just limit the result and order by DESC e.g
您可以通过 DESC 限制结果和顺序,例如
$criteria = new CDbCriteria;
$criteria->order = 'column DESC';
$row = Model::model()->find($criteria);
$somevariable = $row->column;
回答by Gerhard Liebenberg
If you need a WHERE clause:
如果您需要 WHERE 子句:
In controller:
在控制器中:
$max = $model->getMax($filter);
In model:
在模型中:
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;
}
回答by BKY
This is it.
就是这个。
function getMaxId( $modelName ){
$criteria = new CDbCriteria;
$criteria->order = 'id DESC';
$model = $modelName::model()->find( $criteria );
return $model->id;
}

