~WR~
Новичок
А еще, используя тот же PostgreSQL или MSSQL, можно сцепить воедино и rows и count запросы.
В некоторых случаях, использование window-функций дает прирост производительности.
1. Выключаем обычный count:
2. Дополняем {fields} для rows запроса таким образом, чтобы в него добавлялись aggregate'ы.
3. Подставляем получившееся значение count'а в $this->agg:
4. Profit! Все работает в один запрос.
Не бойтесь экспериментировать, если что-то работает не так, как хочется. Количество зависимостей в коде постарались сократить до минимума.
В некоторых случаях, использование window-функций дает прирост производительности.
1. Выключаем обычный count:
PHP:
$this->do_count = false;
PHP:
protected function buildFields($cols)
{
$cols = parent::buildFields($cols);
$cols .= ', count(*) OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS _count';
return $cols;
}
PHP:
protected function parseRow($r)
{
$this->agg['_count'] = $r['_count'];
unset($r['_count']);
return $r;
}
Не бойтесь экспериментировать, если что-то работает не так, как хочется. Количество зависимостей в коде постарались сократить до минимума.