passshift
@passshift
php, js, html5, css

Kohana 3.3 и Query Builder — как выбрать и пересчитать строки одним запросом через модель?

Здравствуйте.

Довольно все банально, но тем не менее не могу понять каким образом сделать SELECT и COUNT по разным критериям одним запросом через модель.

Вот простой пример как уже пытался:

(выбрать всех пользователей чей статус = 1)

$query = DB::select('id', 'name', 'status')
->from('users')
->where('status', '=', 1);


Добавляю к нему пару строк, чтобы пересчитать ВСЕХ пользователей, независимо от статуса:

$total = clone $query;
$total ->select(array(DB::expr('COUNT(id)'), 'total_users'))->from('users')->execute()->as_array();


В итоге тестирую и получаю массив с последним пользователем и числом всех total_users, это не совсем то, что нужно.

Мне необходимо получить полный массив пользователей по критерию и общее число без какого-либо критерия, но сделать это нужно через модель в одном запросе. Как работать с моделью я знаю, хотелось бы получить помощь именно с запросом.

На данный момент я пересчитываю общее число пользователей отдельным запросом:

$total = DB::select(array(DB::expr('COUNT(`id`)'), 'total_users'))->from('users')->execute()->get('total_users');


, но это создает лишнюю нагрузку на БД, причем объем данных которые нужно будет пересчитывать на каждой странице довольно велик.
  • Вопрос задан
  • 3284 просмотра
Решения вопроса 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
JOIN или UNION, но второй запрос должен либо добавлять поле ко всем записям первого, либо иметь тот же список полей. но вообще не понятно зачем такие извращения - если опасаетесь лишней нагрузки, то просто кешируйте результаты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы