如何从数据库中加载条件

时间:2019-05-30 11:44:10

标签: php mysql codeigniter

我是编程的新手,我把手放在公司的Web应用程序上,试图四处乱窜并进行一些更改。如我所知,该应用程序是使用 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 :(得分:0)

我认为limit()函数应该适合您。 here ist a link

答案 1 :(得分:0)

您最初可以加载一定数量的订单,例如。 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();
}

每次将一个计数变量增加10并将其传递给此函数。

答案 2 :(得分:0)

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

我该怎么办?

首先,我将尝试使用您的原始想法来解决它。为此,您只需要创建一个新的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();
}

该方法将在两个日期之间带来所有已完成的订单。是的,但这对于移动应用程序或Web应用程序仍然无效。专门用于用户界面。 然后,如何提高效率?好吧,如果您打开gmail,则会收到最后20封电子邮件,并且使用分页功能将根据您的需要来回移动。他们不会向您显示最近六个月的千分之一的电子邮件,对吗?因此,如果我们遵循这个想法,我们都可以在$limit上添加$offsetget_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个已完成的订单。因此,您需要修改界面以支持此新功能。