COUNT and HAVING

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
lnghost
Сообщения: 134
Зарегистрирован: 2011.07.26, 18:05
Откуда: Воронеж
Контактная информация:

COUNT and HAVING

Сообщение lnghost »

Приветствую.
Имею следующую проблему:
Есть критерия со сложными выборками, в ней есть группировка и having по результатам из select.
Entity::model()->count($criteria) возвращает другие результаты за счет того, что подменяет select и обнуляет group и having. Можно ли как-то это дело побороть.
Писать запрос на DAO не предлагать.

Мне кажется самым лучшим вариантом организовать SELECT COUNT(*) FROM SELECT(...), но не понятно, как это сделать на уровне критерии.
К слову сказать,

Код: Выделить всё

$model->getCommandBuilder()->createCountCommand($model->getTableSchema(), $criteria)->getText()
делает как раз такой запрос (SELECT COUNT(*) FROM ($criteria)), но выкидывает все JOIN и прочее, превращаясь в нерабочий.

Критерия вообще подсовывается в CActiveDataProvider, что увеличивает пагинацию, добавляя несуществующие страницы.
Конференция: yii@conference.jabber.ru Сайт: http://kamaran.ru
lnghost
Сообщения: 134
Зарегистрирован: 2011.07.26, 18:05
Откуда: Воронеж
Контактная информация:

Re: COUNT and HAVING

Сообщение lnghost »

Неужто никто не сталкивался? =\
Конференция: yii@conference.jabber.ru Сайт: http://kamaran.ru
AlTiger
Сообщения: 199
Зарегистрирован: 2012.01.15, 18:37

Re: COUNT and HAVING

Сообщение AlTiger »

Код: Выделить всё

        $sql     = 'SELECT '
            .'  id, count( distinct user_id ) as `user_count` '
            .'FROM '
            .'( '
            .'  SELECT '
            .'    t.id, ref.user_id '
            .'  FROM '
            .'    tree t '
            .'      join tree_ex ex on ( t.id = ex.parent_id ) or ( t.id = ex.tree_id ) '
            .'      left join user_tree_ref ref on ( ex.tree_id = ref.tree_id ) '
            .'      left join `user` u on ( ref.user_id = u.id ) '
            .'      left join object_item oi on ( u.id = oi.user_id ) '
            .'      left join company_profile p on ( oi.id = p.object_item_id ) '
            .'  WHERE '
            .'        ( oi.city_id = :city_id ) '
            ."    And ( u.type = 'company' ) "
            .') as tmp '
            .'GROUP BY '
            .'  id '
            .'HAVING '
            .'  user_count > 0 ';
 
Полностью реализовать не получилось из-за join tree_ex ex on ( t.id = ex.parent_id ) or ( t.id = ex.tree_id ) '

Если это то, что нужно, могу поковырять, вспомнить и предложить
lnghost
Сообщения: 134
Зарегистрирован: 2011.07.26, 18:05
Откуда: Воронеж
Контактная информация:

Re: COUNT and HAVING

Сообщение lnghost »

А я не понял, как это к сабжу относится, как пример SELECT FROM SELECT?
У меня скорее был вопрос в том, как подсунуть во вложенный селект критерию, либо как получить то, что генерит критерия, чтобы руками подсунуть во вложенный запрос.
Конференция: yii@conference.jabber.ru Сайт: http://kamaran.ru
AlTiger
Сообщения: 199
Зарегистрирован: 2012.01.15, 18:37

Re: COUNT and HAVING

Сообщение AlTiger »

А просто сабж не понял =)

Как реализовать через критерию? хз.

У себя делал через scope и relation.

В итоге понял что оно того не стоит и захреначил dao
Ответить