首页 > 解决方案 > 如何从有条件的数据库中加载

问题描述

我是编程新手,我接触了一家公司的网络应用程序,并试图搞砸并做一些改变。据我所知,该应用程序是使用PHPMySQLCodeIgniter构建的,公司使用它来管理订单。

当用户想要查看他单击指定按钮的订单时,应用程序会从数据库中加载所有订单,但由于订单数量超过 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):
?>

知道我该怎么做。

标签: phpmysqlcodeigniter

解决方案


您想要实现的是应用分页的完美定义。分页将帮助您的应用程序将数据库数据拆分为单独的页面,这是在小空间中显示大量记录的有效方法。但是,您想应用一个巨大的卡盘数据查询。六个月是一段很长的时间,在此期间您可以收到很多订单。

我能做些什么?

首先,我将尝试使用您的原始想法来解决它。为此,您只需要创建一个接收两个参数和 的新get_completed_orders()函数。应该将参数添加到. 我猜您的日期名称是并将其与之前的参数进行比较。$start_date$end_dateget_whereorder_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();
}

这种方法将在两个日期之间带来所有已完成的订单。是的,但这对于移动应用程序或 Web 应用程序仍然无效。专门用于用户界面。那么,我怎样才能让它更有效率呢?好吧,如果你打开你的 gmail,你会得到最后 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 个已完成订单。所以你需要修改你的界面来支持这个新特性。


推荐阅读