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

InstantCMS 2.X
#1 28 декабря 2017 в 18:29
В базе в sport_teams хранятся 174 записи но так как я группирую и фильтрую выводится 147 так должно быть но количество в count показывает 174
  1. public function getTournamentsAllTeams($id){
  2. $this->join('cms_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 в 20:31
Потому, что в 18 строке вы считаете количество записей без джоинов, а получаете в 14 строке их с джоинами.
#3 28 декабря 2017 в 20:34


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

Loadырь

Да понимаю, а как сделать это правильно потому?
#4 28 декабря 2017 в 20:46
Вывести все фильтры и группировки из метода getTournamentsAllTeams и сделать их общими для подсчёта количества и получения записи. Или вместо getTournamentsAllTeamsCount() использовать
  1. $model->getCount('sport_teams');
#5 28 декабря 2017 в 20:56


Вывести все фильтры и группировки из метода getTournamentsAllTeams и сделать их общими для подсчёта количества и получения записи. Или вместо getTournamentsAllTeamsCount() использовать

  1. $model->getCount('sport_teams');

Loadырь

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

  1. <?php if($total > $perpage) { ?>
  2. <?php echo html_pagebar($page, $perpage, $total); ?>
  3. <?php } ?>
#6 28 декабря 2017 в 22:12
Вот тут для примера показано, что сначала идёт фильтрация, группировка и прочее, потом идёт подсчёт количества в 246 строке и следом в 247 строке идёт получение уже отфильтрованных данных. У вас же сначала методом getTournamentsAllTeamsCount вы получаете количество, а потом фильтруете-группируете непосредственно в самом методе getTournamentsAllTeams и получаете сами записи.
#7 28 декабря 2017 в 22:23


Вот тут для примера показано, что сначала идёт фильтрация, группировка и прочее, потом идёт подсчёт количества в 246 строке и следом в 247 строке идёт получение уже отфильтрованных данных. У вас же сначала методом getTournamentsAllTeamsCount вы получаете количество, а потом фильтруете-группируете непосредственно в самом методе getTournamentsAllTeams и получаете сами записи.

Loadырь
Вот как у меня в экшене.
  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
#8 29 декабря 2017 в 06:02

Но все так же.

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


Но все так же.

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

Loadырь

Спасибо за подсказки но в этом я уже слаб, наверное не смогу сделать, просто не тупо не знаю как.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.