public function getTournamentsAllTeams($id){ $this->select('s.nickname', 'user_nickname'); $this->select('s.surname', 'user_surname'); $this->filterEqual('u.sport_system', $id); /* Фильтр тура 1 = 1 */ if (!$this->order_by){ $this->order_by = 'SUM(u.win) desc '; //запишем напрямую, без вызова функции } $this->select('SUM(u.points)', 't_points'); // берем не просто поле points, а суммируем его в запросе $this->select('SUM(u.win)', 't_win'); // берем не просто поле points, а суммируем его в запросе $this->select('SUM(u.play)', 't_play'); // берем не просто поле points, а суммируем его в запросе $this->groupBy('u.teams_id'); //группируем по полю teams_id - правильно? - если нет, поставьте свое поле или поля через запятую $teams['teams_all'] = $this->get('sport_teams'); return $teams; } public function getTournamentsAllTeamsCount(){ return $this->getCount('sport_teams'); }
Потому, что в 18 строке вы считаете количество записей без джоинов, а получаете в 14 строке их с джоинами.
Да понимаю, а как сделать это правильно потому?
$model->getCount('sport_teams');
Вывести все фильтры и группировки из метода getTournamentsAllTeams и сделать их общими для подсчёта количества и получения записи. Или вместо getTournamentsAllTeamsCount() использовать
$model->getCount('sport_teams');
Мне ведь нужно 147 было, а если я выведу тогда 174 я там фильтрую и группирую все строки. Команды которые участвуют на турнирах, 147, а отстальные не участвуют, по этому их не показываю.
<?php if($total > $perpage) { ?> <?php echo html_pagebar($page, $perpage, $total); ?> <?php } ?>
Вот как у меня в экшене.
Вот тут для примера показано, что сначала идёт фильтрация, группировка и прочее, потом идёт подсчёт количества в 246 строке и следом в 247 строке идёт получение уже отфильтрованных данных. У вас же сначала методом getTournamentsAllTeamsCount вы получаете количество, а потом фильтруете-группируете непосредственно в самом методе getTournamentsAllTeams и получаете сами записи.
$page = $this->request->get('page', 1); $perpage = 20; $template = cmsTemplate::getInstance(); $sport_panel = $this->model->getSportTeamPanel($id); $this->model->limitPage($page, $perpage);
Естественно, ведь тот ваш код, который я себе представлял и приведённый вами ничем не отличается.Но все так же.
В 10 строке считаете количество, а в 12 начинаете фильтровать, группировать и получать данные.
Вам надо вынести всю фильтрацию и группировки из 12 строки в 9 строку. Только тогда что-то изменится.
Естественно, ведь тот ваш код, который я себе представлял и приведённый вами ничем не отличается.Но все так же.
В 10 строке считаете количество, а в 12 начинаете фильтровать, группировать и получать данные.
Вам надо вынести всю фильтрацию и группировки из 12 строки в 9 строку. Только тогда что-то изменится.
Спасибо за подсказки но в этом я уже слаб, наверное не смогу сделать, просто не тупо не знаю как.