условие в критериях в рамках yii php - PullRequest
2 голосов
/ 23 марта 2012
$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?

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

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

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

ОБНОВЛЕНИЕ

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

<?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());

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

0 голосов
/ 04 апреля 2012

Может быть, вы могли бы использовать суб-выборочный запрос.

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

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

Или как внутреннее соединение (которое также может содержать условие «где 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 вашего запроса. Кроме того, «group by t.id» больше не требуется, поскольку spcount теперь является единственным значением для каждой строки основной таблицы («t»).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...