Как вывести правильное количество постраничного режима ? 2.X

 
Посетитель
small user social cms
Медаль
Сообщений: 624
В базе в sport_teams хранятся 174 записи но так как я группирую и фильтрую выводится 147 так должно быть но количество в count показывает 174
Код PHP:
  1. public function getTournamentsAllTeams($id){
  2. $this->join('{users}', 's', 's.id = i.user_id');
  3. $this->select('s.nickname', 'user_nickname');
  4. $this->select('s.surname', 'user_surname');
  5. $this->join('sport_teams_tournaments', 'u', 'u.teams_id = i.id');
  6. $this->filterEqual('u.sport_system', $id); /* Фильтр тура 1 = 1 */
  7. if (!$this->order_by){
  8. $this->order_by = 'SUM(u.win) desc '; //запишем напрямую, без вызова функции
  9. }
  10. $this->select('SUM(u.points)', 't_points'); // берем не просто поле points, а суммируем его в запросе
  11. $this->select('SUM(u.win)', 't_win'); // берем не просто поле points, а суммируем его в запросе
  12. $this->select('SUM(u.play)', 't_play'); // берем не просто поле points, а суммируем его в запросе
  13. $this->groupBy('u.teams_id'); //группируем по полю teams_id - правильно? - если нет, поставьте свое поле или поля через запятую
  14. $teams['teams_all'] = $this->get('sport_teams');
  15. return $teams;
  16. }
  17.  
  18. public function getTournamentsAllTeamsCount(){
  19. return $this->getCount('sport_teams');
  20. }
  21.  
Как вывести правильное количество постраничного режима ?
Редактировалось: 2 раз (Последний: 28 декабря 2017 в 18:29)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3549
Потому, что в 18 строке вы считаете количество записей без джоинов, а получаете в 14 строке их с джоинами.
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 624
Loadырь:

Потому, что в 18 строке вы считаете количество записей без джоинов, а получаете в 14 строке их с джоинами.

Да понимаю, а как сделать это правильно потому ?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3549
Вывести все фильтры и группировки из метода getTournamentsAllTeams и сделать их общими для подсчёта количества и получения записи. Или вместо getTournamentsAllTeamsCount() использовать
Код PHP:
  1. $model->getCount('sport_teams');
Посетитель
small user social cms
Медаль
Сообщений: 624
Loadырь:

Вывести все фильтры и группировки из метода getTournamentsAllTeams и сделать их общими для подсчёта количества и получения записи. Или вместо getTournamentsAllTeamsCount() использовать
Код PHP:
  1. $model->getCount('sport_teams');

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

Код PHP:
  1. <?php if($total > $perpage) { ?>
  2. <?php echo html_pagebar($page, $perpage, $total); ?>
  3. <?php } ?>
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3549
Вот тут для примера показано, что сначала идёт фильтрация, группировка и прочее, потом идёт подсчёт количества в 246 строке и следом в 247 строке идёт получение уже отфильтрованных данных. У вас же сначала методом getTournamentsAllTeamsCount вы получаете количество, а потом фильтруете-группируете непосредственно в самом методе getTournamentsAllTeams и получаете сами записи.
Посетитель
small user social cms
Медаль
Сообщений: 624
Loadырь:

Вот тут для примера показано, что сначала идёт фильтрация, группировка и прочее, потом идёт подсчёт количества в 246 строке и следом в 247 строке идёт получение уже отфильтрованных данных. У вас же сначала методом getTournamentsAllTeamsCount вы получаете количество, а потом фильтруете-группируете непосредственно в самом методе getTournamentsAllTeams и получаете сами записи.
Вот как у меня в экшене.
Код PHP:
  1. $page = $this->request->get('page', 1);
  2. $perpage = 20;
  3.  
  4. $template = cmsTemplate::getInstance();
  5.  
  6. $sport_panel = $this->model->getSportTeamPanel($id);
  7.  
  8. $this->model->limitPage($page, $perpage);
  9.  
  10. $total = isset($total) ? $total : $this->model->getTournamentsAllTeamsCount();
  11.  
  12. $teams = isset($teams) ? $teams : $this->model->getTournamentsAllTeams($id);
Но все так же. scratch
Редактировалось: 1 раз (Последний: 28 декабря 2017 в 22:24)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3549
Нико:
Но все так же.
Естественно, ведь тот ваш код, который я себе представлял и приведённый вами ничем не отличается.
В 10 строке считаете количество, а в 12 начинаете фильтровать, группировать и получать данные.
Вам надо вынести всю фильтрацию и группировки из 12 строки в 9 строку. Только тогда что-то изменится.
Посетитель
small user social cms
Медаль
Сообщений: 624
Loadырь:

Нико:
Но все так же.
Естественно, ведь тот ваш код, который я себе представлял и приведённый вами ничем не отличается.
В 10 строке считаете количество, а в 12 начинаете фильтровать, группировать и получать данные.
Вам надо вынести всю фильтрацию и группировки из 12 строки в 9 строку. Только тогда что-то изменится.

Спасибо за подсказки но в этом я уже слаб, наверное не смогу сделать, просто не тупо не знаю как.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.