aza73
(Yuriymih)
June 19, 2013, 6:52pm
1
Здравствуйте!
Подскажите, пожалуйста.
Делаю выборку з таблиц при этом использую группировку GROUP BY.
Вывожу с помощью виджета CListView.
Используется пагинатор. При этом он выдает неправильное кол-во страниц - последняя ссылка лишняя!!!
Тоисть подсчет общего кол-ва записей не совпадает с кол-вом выборки при условии использования группировки GROUP BY.
Как быть? Как заставить пагинатор учитывать кол-во страниц с условием грппировки?
Спасибо за любой совет!
Charger
(Charger)
June 20, 2013, 5:07am
2
Скорее всего у вас генерируется не совсем правильный SQL запрос. Посмотрите его в логе, наверняка там с JOIN проблема и возвращаются дублирующие строки.
В качестве выстрела наугад, попробуйте там где генерируете DBCriteria добавить: $criteria->together=true;
aza73
(Yuriymih)
June 20, 2013, 5:43am
3
Charger:
Скорее всего у вас генерируется не совсем правильный SQL запрос. Посмотрите его в логе, наверняка там с JOIN проблема и возвращаются дублирующие строки.
В качестве выстрела наугад, попробуйте там где генерируете DBCriteria добавить: $criteria->together=true;
ВОПРОС РЕШИЛСЯ:
Соответственно, мы руками высчитываем общее количество и устанавливаем найденное значение в атрибут totalItemCount компонента CActiveDataProvider
// Клонируем объект критерии, чтобы посчитать общее количество записей
$countCriteria = clone $criteria;
$countCriteria->select = '1';
$sum = count(static::model()->findAll($countCriteria));
$pages=new CPagination($sum);
$pages->pageSize=50;
$pages->applyLimit($criteria);
return new CActiveDataProvider(get_class($this), array(
'totalItemCount' => $sum,
'criteria'=>$criteria,
'pagination'=>$pages,
'sort' => array(
'attributes' => array(
// Тут устанавливаем свою сортировку по нужному полю
'clicks' => array(
'asc' => 'SUM(clicks) ASC',
'desc' => 'SUM(clicks) DESC',
)
),
'defaultOrder' => 'date DESC',
),
));