Разбиение на страницы, извлекающие строки более одного раза в записях поиска в CodeIgniter

#php #sql #codeigniter

#php #sql #codeigniter

Вопрос:

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

Допустим, я хочу десять на страницу и получаю четырнадцать результатов. На первой странице десять результатов, как и на второй. Когда это должно быть, у первого десять, а у второго четыре. Было бы хорошо, если бы он просто повторял один результат, но раздражает необходимость прокручивать шесть предыдущих результатов. Любая помощь будет высоко оценена, заранее спасибо.

URL-адрес результата поиска

https://xxxx.xxx/site/search?id=2amp;query=2 ПК Еда и страница=2

id = 2 — идентификатор ресторана, а параметр запроса — для введенного ключевого слова поиска

контроллер

  // THIS FUNCTION IS RESPONSIBLE FOR SHOWING SEARCH RESULTS
    function search()
    {
    
        $page_data['restaurant_id']    =  sanitize($_GET['id']);
        $page_data['query']            =  sanitize($_GET['query']);   
        $page_data['page_name']        = 'search/index';
        $page_data['page_title']       = 'Search result';
        
        /**PAGINATION STARTS**/
        $total_rows = $this->menu_model->count_search_menu($page_data['query'], $page_data['restaurant_id']);
        $page_size = 10;
        $pagination_url = site_url('site/search');
        $config = pagintaion($total_rows, $page_size, $pagination_url);
        $current_page = sanitize($this->input->get('page', 0));
        $this->pagination->initialize($config);

        $page_data['total_rows']  = $total_rows;
        $page_data['search_result'] = $this->menu_model->get_searched_menu_by_name_and_restaurant($page_data['query'], $page_data['restaurant_id'], $page_size ,$current_page);

        $this->load->view(frontend('index'), $page_data);

    }
 

МОДАЛЬНЫЙ

  // COUNT TOTAL ROWS
    public function count_search_menu($query, $restaurant)
    {
        $this->db->where('restaurant_id', $restaurant);
        $this->db->like('name', $query, 'both'); //both = %query%, before = %query, after = query%
        $menu  = $this->db->get($this->table);
        $result = $menu->result();
        $count = count($result);
        return $count;
    }

     // GET MENU BY SEARCH NAME AND RESTAURANT ID
    public function get_searched_menu_by_name_and_restaurant($query, $restaurant, $limit, $start)
    {
        $this->db->where('restaurant_id', $restaurant);
        $this->db->like('name', $query, 'both'); //both = %query%, before = %query, after = query%

        // Executes: SELECT * FROM mytable LIMIT 10 OFFSET 20
        // get([$table = ''[, $limit = NULL[, $offset = NULL]]])
       // $this->db->get('mytable', 10, 20);

        $menu  = $this->db->get($this->table, $limit, $start);
        return $menu->result();
    }
 

Пример визуального просмотра:

на страницу = 10

всего строк = 25

тот же результат

Как вы можете видеть выше, на всех 3 страницах отображается 10 элементов, вместо этого должно отображаться 10 на 1-й странице, 10 на 2-й и 5 на 3-й странице.

Комментарии:

1. Вам нужно умножить $current_page на $page_size и использовать это как смещение.

2. какой глаз, чувак! да, именно так! большое вам спасибо

3. Разбивка на страницы без упорядочения имеет мало смысла. Покажет вам случайные строки данных.