gpt4 book ai didi

php - Codeigniter 中的月度报告

转载 作者:行者123 更新时间:2023-11-29 10:07:05 26 4
gpt4 key购买 nike

我正在开发一个酒店预订系统项目。

我的问题是我想每个月循环一次,比如 1 是一月 2 是二月等等。如果它是 1,那么它将通过将其与 mySQL 数据库表上的 cout_created 列进行比较来获取月份为 1 或 1 月的所有行,并添加每条记录的所有利润,稍后将其放入一个像这样的数组:

$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 框架。

最佳答案

您需要做的是将数据库查询与 PHP 中的简单 for 循环结合起来。

首先,您必须了解如何获取该月内的所有值。 cout_created 是时间戳/日期时间字段。在 MySQL 中,您可以使用如下查询来获取数据:

从您的表中选择 * 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 允许我们使用其内置的 SUM() function 来做同样的事情。直接在MySQL上处理,所以我们不需要在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 环境,但请让我知道它是如何工作的,我会相应地更新答案。

<小时/>

编辑:我提出了另一种解决方案,只需对数据库进行一次查询即可解决该问题,但这取决于数据库大小和记录数量的性能:

选择 SUM(cout_result) 作为利润,MONTH(cout_created) 作为 mymonth
来自您的餐 table
按月分组(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;
}

关于php - Codeigniter 中的月度报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51742095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com