codeigniter月报

lzfw57am  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(273)

我正在开发一个项目,这是一个酒店预订系统。
我的问题是我想每个月循环,比如1是1月2是2月,以此类推。如果它是1,那么通过将它与 cout_created 列,并添加每条记录的所有利润,稍后将其放入如下数组中:

$monthlyreport = [
   1 => 6000,
   2 => 5000,
   3 => 3000,
   4 => 12000,
   5 => 8000,
   6 => 4000,
   7 => 6000,
   8 => 9000,
   9 => 4000,
   10 => 6000,
   11 => 9000,
   12 => 4000,
];

这是mysql数据库表模式的一个示例行:

Row Name      Row Data

id            9
gst_id        1
cout_tin      2018-07-01
cout_tout     2018-07-02
cout_nodays   1
cout_single   1
cout_double   2
cout_family   1
cout_roombal  13000
cout_billbal  1120
cout_totalbal 14120
cout_downbal  6500
cout_result   7620
cout_created  2018-07-15 09:34:12

我使用php和codeigniter框架。

whlutmcx

whlutmcx1#

您需要做的是在php中将数据库查询与一个简单的for循环相结合。
首先,您必须了解如何获取月份内的所有值。 cout_created 是时间戳/日期时间字段。在mysql中,您可以使用如下查询获取数据: SELECT * FROM yourtable WHERE MONTH(cout_created) = XX 使用此查询,在php中,您将得到以下结果:

// Initialize the array
$monthlyreport = array();
// For each month we are gonna do the same
for ($month = 1; $month <= 12; $month++) {
    // We get the results with database library, changing the sql according to our needs.
    $sql = "SELECT cout_result FROM yourtable WHERE MONTH(cout_created) = " . $month; 
    $query = $this->db->query($sql);
    // The accum variable to sum all the profits.
    $sum = 0;      
    // And foreach record, we sum the value to the actual one.
    foreach($query->result() as $row) {
       $sum = $sum + $row->cout_result;
    }
    // When finish, save the result on the array and start again.
    $montlyreport[$month] = $sum;
}

这将是理解如何做到这一点的最简单方法,但我们可以做得更好。mysql允许我们通过直接在mysql上使用其内置的sum()函数来实现同样的功能,因此我们不必在php上进行额外的处理。我们可以这样做:

// Initialize the array
$monthlyreport = array();
// For each month we are gonna do the same
for ($month = 1; $month <= 12; $month++) {
    // But now we will get sum of the values instead of each value
    $sql = "SELECT SUM(cout_result) as profit FROM yourtable WHERE MONTH(cout_created) = " . $month; 
    $query = $this->db->query($sql);
    // And just save the profit
    $montlyreport[$month] = $query->row()->profit;
}

我没有测试它,因为我没有一个php环境在这里进行测试,但让我知道它是如何工作的,我会相应地更新答案。
编辑:我提供了另一个解决方案,它只对数据库执行一个查询,但这取决于数据库大小和记录数的性能: SELECT SUM(cout_result) as profit, MONTH(cout_created) as mymonth FROM yourtable GROUP BY MONTH(cout_created) 这样,您只需要使用 foreach 直接通过 mymonth ```
$sql = "SELECT SUM(cout_result) as profit, MONTH(cout_created) as mymonth FROM yourtable GROUP BY MONTH(cout_created)"
$query = $this->db->query($sql);
$monthlyreport = array();
foreach ($query->result() as $row) {
$monthlyreport[$row->mymonth] = $row->profit;
}

相关问题