php - 如何从有条件的数据库中加载
问题描述
我是编程新手,我接触了一家公司的网络应用程序,并试图搞砸并做一些改变。据我所知,该应用程序是使用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):
?>
知道我该怎么做。
解决方案
您想要实现的是应用分页的完美定义。分页将帮助您的应用程序将数据库数据拆分为单独的页面,这是在小空间中显示大量记录的有效方法。但是,您想应用一个巨大的卡盘数据查询。六个月是一段很长的时间,在此期间您可以收到很多订单。
我能做些什么?
首先,我将尝试使用您的原始想法来解决它。为此,您只需要创建一个接收两个参数和 的新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
, 并$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 个已完成订单。所以你需要修改你的界面来支持这个新特性。
推荐阅读
- android - 如何在 Android Studio 中测试受限 Internet 访问
- qt5 - qt creator (3.5.1) 在打开源代码时崩溃
- sql - Powershell Invoke-Sqlcmd 工作目录
- php - 本地主机上的 Sublime 3 + Livereload(运行 sass)
- android - 我怎样才能在android studio中打破这个循环
- c++ - 使用 avr-gcc 隐式转换为浮点数:uint8_t 与 uint16_t
- css - 使用引导框架在图像上叠加 CSS 点
- javascript - ng-click 不工作不止一次
- javascript - 在javascript中包含整个字符串中的单词
- python - 我被困在如何将 Pytorch 代码转换为注意力模型的 Keras