Wcześniej miałem dokładnie takie same wymagania dotyczące paginacji i udało mi się to zrobić za pomocą CodeIgniter Active Record.
Najpierw ustaw opcję SQL_CALC_FOUND_ROWS
jako pseudokolumnę w instrukcji select i ustaw zapytanie escape na false:
$this->db->select('SQL_CALC_FOUND_ROWS null as rows, other columns ...',FALSE);
Następnie, po wykonaniu zapytania z limitem i przesunięciem w miejscu, przypisz zestaw wyników do tablicy zwracanej:
$data = $this->db->get();
$return['results'] = $data->result();
// Do something with the results
Na koniec uruchom drugie zapytanie, aby uzyskać znalezione wiersze, a także przypisz je do tablicy zwracanej. Używam tutaj łączenia metod, aby zrobić to wszystko w jednym kroku.
$return['rows'] = $this->db->query('SELECT FOUND_ROWS() count;')->row()->count;
I zwróć wynik i tablicę liczby wierszy.
return $return;