условие в критериях в yii framework php

$criteria=new CDbCriteria(); $criteria->with = array('reviewCount', 'category10', 'category20', 'category30', 'town'); $criteria->select = 't.id,business,street,postalCode,contactNo,checkinCount,count(tbl_abc.id) as spcount'; $criteria->join = 'left join tbl_abc on t.id=tbl_abc.businessId'; $criteria->group = 't.id'; $criteria->order = 'spcount DESC'; $criteria->condition='spcount>1'; $bizModel = new CActiveDataProvider(Business::model(), array( 'criteria' => $criteria )); 

Я получаю эту ошибку:

Column not found: 1054 Unknown column 'spcount' in 'where clause'

Если я опускаю условие, то запрос работает нормально и заказывает бизнес по spcount. Итак, как мне переписать этот запрос таким образом, чтобы получить все предприятия, чья spcount больше 1?

Насколько я знаю, вы не можете ссылаться на псевдонимы в части WHERE ( доказательная ссылка ). Удалите строку условия и добавьте следующее:

 $criteria->having = 'COUNT(tbl_abc.id) > 1'; 

ОБНОВИТЬ

CActiveDataProvider принимает экземпляр finder , поэтому вам понадобится область модели:

 <?php class Business extends CActiveRecord { public function scopes() { return array( 'hasSpcount' => array( 'with' => array('reviewCount', 'category10', 'category20', 'category30', 'town'), 'select' => 't.id,business,street,postalCode,contactNo,checkinCount,count(tbl_abc.id) as spcount', 'join' => 'left join tbl_abc on t.id=tbl_abc.businessId', 'group' => 't.id', 'order' => 'spcount DESC', 'having' => 'COUNT(tbl_abc.id) > 1', ), ); } } // usage $provider = new CActiveDataProvider(Business::model()->hasSpcount()); 

Надеюсь, это сработает

Возможно, вы можете использовать запрос подвыборки.

Например, в выбранной части объекта критериев:

 $criteria->select = 't.id,business,street,postalCode,contactNo,checkinCount,(select count(id) from tbl_abc where t.id=businessId) as spcount'; 

Или как внутреннее соединение (которое также может содержать условие «where spcount> 1»):

 $criteria->join = 'join (select businessId, count(*) as spcount from tbl_abc) abc on t.id=abc.businessId and abc.spcount>1'; 

В обоих сценариях spcount также доступен в where-clause вашего запроса. Кроме того, «group by t.id» больше не требуется, поскольку spcount теперь является единственным значением для каждой строки основной таблицы («t»).

Надеюсь это поможет