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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 03:00:46  来源:igfitidea点击:

Using Yii Active Record to find max of one column

phpmysqlactiverecordyiimax

提问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:

参考:

http://www.yiiframework.com/forum/index.php/topic/6730-how-can-i-use-max-in-find-method/page_view_findpost_p_80659

http://www.yiiframework.com/forum/index.php/topic/6730-how-can-i-use-max-in-find-method/page_查看_findpost_ p_80659

回答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;
}