Как загрузить из базы данных с условием - PullRequest
0 голосов
/ 30 мая 2019

Я новичок в программировании, и я взял в руки веб-приложение от компании и попытался возиться и внести некоторые изменения. Приложение было построено с PHP , MySQL и CodeIgniter , как мне сказали, и используется компанией для управления заказами.

Когда пользователь хочет увидеть заказы, он нажимает указанную кнопку, и приложение загружает все заказы из базы данных, но, поскольку существует более 10.000 заказов, это медленная загрузка. Итак, я хочу добавить опцию, когда первая загрузка происходит, чтобы получить только заказы , за последние 6 месяцев , и если пользователь хочет просмотреть более старые заказы, тогда я должен добавить кнопку или что-то подобное и загрузить остальное.

<?php
 $count=1;
 $this->db->order_by("order_number", "desc");
 $completed_orders=$this->db->get_where('orders' , array(
                                        'order_status' => 'completed',
                                        'category' => 'mesoportes'
                                        ))->result_array();
 foreach ($completed_orders as $row):
?>

Любая идея, как я могу это сделать.

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Вы можете изначально загрузить определенное количество заказов, например, на.10, и сгенерируйте вызов AJAX по нажатию кнопки, чтобы загрузить еще 10 заказов и т. Д.

Метод загрузки заказов из базы данных может быть -

function get_orders($start, $limit){
 return $this->db->select('*')->where(array('order_status' => 'completed','category' => 'mesoportes'))->limit($limit, $start)->order_by("order_number", "desc")->get('orders')->result_array();
}

Каждый разувеличьте переменную count на 10 и передайте ее этой функции.

0 голосов
/ 31 мая 2019

То, чего вы пытаетесь достичь, - это идеальное определение для нумерации страниц.Разбивка на страницы поможет вашему приложению разделить данные базы данных на отдельные страницы, что является эффективным методом отображения большого количества записей в небольшом пространстве.Тем не менее, вы хотите применить огромный запрос данных.Шесть месяцев - это много, и вы можете получить много заказов за этот период.

Что я могу сделать?

Сначала я попытаюсь решить ее, используя вашу оригинальную идею.Для этого вам просто нужно создать новую функцию 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 выполненных заказов для каждой страницы.Поэтому вам нужно изменить интерфейс для поддержки этой новой функции.

0 голосов
/ 30 мая 2019

Я думаю, что функция limit () должна работать на вас. здесь ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...