我想显示基于月份的年度报告,假设我在 1 月、8 月和 12 月有订单,但今年剩余时间没有订单。
当我使用 CI 查询时
select month(order_date) as month_name,
count(order_id) as amount
from order
where year(order_date) = 2011
group by month(order_date)
只返回了 3 行。
假设我然后这样做:使用 $query->result_array()
Array ([0] => Array ( [month_num] => 1 [amount] => 4 )
[1] => Array ( [month_num] => 8 [amount] => 1 )
[2] => Array ( [month_num] => 12 [amount] => 19 )
)
这很好,但我需要用缺少的月份来填补这一年的剩余时间。如果数据库中不存在该月份,我需要将金额默认为零。
基本上,我最终会得到一个数组,其中包含一年中的所有月份以及从数据库中获取的值,如果月份不存在则为零。
最佳答案
我不确定这在 SQL 中是否可行。可能是。
这是一个仅使用 PHP 的解决方案。
$orders = array(
array(
'month_num' => 1,
'amount' => 4
),
array(
'month_num' => 2,
'amount' => 0
),
array(
'month_num' => 3,
'amount' => 4
)
);
$report = array_combine( range( 1, 12), array_fill( 1, 12, 0));
foreach( $orders as $order)
{
$report[ $order['month_num'] ] = $order['amount'];
}
var_dump( $report);
如果您将键用作月份编号并将值用作订单数(就像上面的答案那样),您也可以避免使用多维数组:
$orders = array( 1 => 4, 2 => 0, 3 => 0, 4 => 0);
然后您可以在一行中形成您的报告:
$report = array_replace( array_combine( range( 1, 12), array_fill( 1, 12, 0)), $orders);
关于php - 在数据不可用时显示年度报告(CI、PHP、MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113369/