我正在开发一个酒店预订系统项目。
我的问题是我想每月循环播放,例如1月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框架一起使用。
答案 0 :(得分:1)
您需要做的是将数据库查询与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() function来执行相同的操作,因此我们不必在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;
}
答案 1 :(得分:-1)
$currentyear_result=array();
for ($i = 1; $i <= 12; $i++) {
$year_record =$this->db->where('YEAR(created_at)', date('Y'))->where('MONTH(created_at)', date($i))->count_all_results('order_details');
if (!empty($year_record)) {
$currentyear_result[$i] =$lastyear_record;
} else {
$currentyear_result[$i] = 0;
}
}
Output: Array (
[1] => 8
[2] => 3
[3] => 0
[4] => 0
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 1
[10] => 0
[11] => 0
[12] => 0 )