【问题标题】:Display Yearly Report When Data Not Available (CI, PHP, MySQL)数据不可用时显示年度报告(CI、PHP、MySQL)
【发布时间】:2011-11-13 17:37:27
【问题描述】:

我想显示一个基于月份的年度报告,假设我在 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 行。

说我然后这样做:use $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 )
      )

这很好,但我需要用缺失的月份来填写一年中剩下的时间。如果数据库中不存在月份,我需要将金额默认为零。

基本上,我最终会得到一个包含一年中所有月份的数组,其中的值取自数据库,如果月份不存在,则为零。

【问题讨论】:

  • 简单!用零填充你的数组。
  • 感谢 barry 编辑我的问题 :) 感谢 @nickb 提供迷人的解决方案,非常感谢 :)
  • @tegaralaga:如果问题解决了,请选择正确答案并标记为正确答案。如果没有,请添加您找到的并标记为正确的。
  • @Tadeck:完成,先生! :) 再次感谢

标签: php mysql arrays codeigniter


【解决方案1】:

我不确定这是否可以在 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);

Demo

【讨论】:

  • @tegaralaga 不客气 - 如果我的帖子完全回答了您的问题,您能否将其标记为已接受?谢谢。
  • @tegaralaga - 仅供参考,您可能还想回顾一下您的其他问题并投票赞成答案/将它们标记为已接受/两者!
【解决方案2】:
$month_array = Array ( [0] => Array ( [month_num] => 1 [amount] => 4 ) [1] => Array ( [month_num] => 8 [amount] => 1 ) [2] => Array ( [month_num] => 12 [amount] => 19 ) );

$new_month_array = array();
foreach( $month_array as $month ){
    $new_month_array[] = $month;
}

【讨论】:

  • $month_array 是你从数据库中返回的,而不是我上面发布的
  • @Homer6 但是从数据库中返回的是一个可能不完整的已检索订单列表 - 如果未返回月份,如何将订单计数 0 输入到数组中?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2015-05-19
相关资源
最近更新 更多