Yii Active Record でデータベース内の 1 つの列の最大値を見つけるにはどうすればよいですか?
純粋な sql とcreateCommand
メソッドで実行できますが、Active Record とCDbCriteria
class で実行したいのですが、何か方法はありますか?
Yii Active Record でデータベース内の 1 つの列の最大値を見つけるにはどうすればよいですか?
純粋な sql とcreateCommand
メソッドで実行できますが、Active Record とCDbCriteria
class で実行したいのですが、何か方法はありますか?
選択基準を次のように変更します。
$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();
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;
}