php - 在数据不可用时显示年度报告(CI、PHP、MySQL)

标签 php mysql arrays codeigniter

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

Demo

关于php - 在数据不可用时显示年度报告(CI、PHP、MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113369/

相关文章:

arrays - Bash 脚本 - unix - 未找到命令

arrays - 在 Excel VBA 中反转数组

java - 为什么这个 PBKDF2 函数每次都会输出不同的哈希值

php - PDO不会执行更新

php - 错误:方法 Doctrine\ORM\Query\Expr\From::__toString() 不得在 symfony 2 应用程序中抛出异常

mysql 字段名包含反引号

mysql - 这个带有 HAVING MAX 的查询实际上如何正确工作?

javascript - 如何使用 Ajax 提交表单并获取一些文本作为返回

c# - 使用PHP显示用于C#程序的SQL表

php - 回显来自 mysql_query 的所有结果