#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. Разбивка на страницы без упорядочения имеет мало смысла. Покажет вам случайные строки данных.