То, чего вы пытаетесь достичь, - это идеальное определение для нумерации страниц.Разбивка на страницы поможет вашему приложению разделить данные базы данных на отдельные страницы, что является эффективным методом отображения большого количества записей в небольшом пространстве.Тем не менее, вы хотите применить огромный запрос данных.Шесть месяцев - это много, и вы можете получить много заказов за этот период.
Что я могу сделать?
Сначала я попытаюсь решить ее, используя вашу оригинальную идею.Для этого вам просто нужно создать новую функцию get_completed_orders()
, которая получает два параметра $start_date
и $end_date
.Там параметры должны быть добавлены к get_where
.Я предполагаю, что имя вашей даты order_datetime
и сравните его с предыдущими параметрами.
$start_date = '2018-11-01';
$end_date = '2019-05-31';
$completed_orders = get_completed_orders($start_date, $end_date);
function get_completed_orders($start_date, $end_date){
return $this->db->get_where(
'orders',
array(
'order_status' => 'completed',
'category' => 'mesoportes',
'order_datetime >=' => $start_date,
'order_datetime <' => $end_date
)
)->order_by('order_number', 'desc')->result_array();
}
Этот подход принесет все выполненные заказы между двумя датами.Да, но это все еще не эффективно для мобильного приложения или веб-приложения.Специально для пользовательского интерфейса. Тогда, как я могу сделать его более эффективным? Что ж, если вы откроете свою почту, вы получите последние 20 писем, а с помощью нумерации страниц вы переместитесь назад и вперед в соответствии с вашими потребностями.Они не показывают вам тысячи писем за последние шесть месяцев, верно?Итак, если мы следуем этой идее, мы все можем добавить $limit
и $offset
к get_completed_orders()
, чтобы создать подход, похожий на нумерацию страниц.
$start_date = '2018-11-01';
$end_date = '2019-05-31';
$limit = 20; // max number of orders
$offset = $prev_offset + $limit; // where is gonna to start
$completed_orders = get_completed_orders($start_date, $end_date, $limit, $offset);
$prev_offset = $offset;
// Function implementation
function get_completed_orders($start_date, $end_date, $limit, $offset) {
return $this->db->get_where(
'orders',
array(
'order_status' => 'completed',
'category' => 'mesoportes',
'order_datetime >=' => $start_date,
'order_datetime <' => $end_date
),
$limit,
$offset
)->order_by('order_number', 'desc')->result_array();
}
Теперь ваш интерфейс будет получать только 20 выполненных заказов для каждой страницы.Поэтому вам нужно изменить интерфейс для поддержки этой новой функции.