5

Yii Active Record でデータベース内の 1 つの列の最大値を見つけるにはどうすればよいですか?

純粋な sql とcreateCommandメソッドで実行できますが、Active Record とCDbCriteriaclass で実行したいのですが、何か方法はありますか?

4

6 に答える 6

12

選択基準を次のように変更します。

$model = new Model;
$criteria=new CDbCriteria;
$criteria->select='max(column) AS maxColumn';
$row = $model->model()->find($criteria);
$somevariable = $row['maxColumn'];

参照:

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

于 2012-08-29T20:56:02.793 に答える
6

これにより、不要な一時オブジェクトの作成が回避されます。

$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();
于 2013-08-08T04:12:16.493 に答える
0

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;
}
于 2013-07-19T21:47:37.907 に答える