创建PHP数组,其中包含从SQL提取的按月提取的日期和订单数

时间:2013-12-17 14:54:18

标签: php sql arrays date monthcalendar

我有一个名为'orders'的表,其中有多行具有不同的日期。

我想构建一个每月订单数量的图表,所以我需要查询一个如下所示的数组:

  • Jan ------- 3
  • 2月------- 1
  • Mar ------- 0
  • 4月------- 8 ......

如图所示,即使没有订单,月份也会显示。

从那里,我需要加载数组的数量:

$data1y=array(3,1,0,8...);

虽然我会有这样一个月的数组:

$graph->xaxis->SetTickLabels(array('Jan','Feb','March','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'));

我试过像这样的SQL,但没有运气:

SELECT COUNT(*) FROM orders GROUP BY month(date)

2 个答案:

答案 0 :(得分:2)

您的查询应该是这样的:

SELECT DATE_FORMAT(`date`, '%Y%m') AS `Ym`, COUNT(*) AS `count`
FROM `orders`
GROUP BY `Ym`

demo

P.S。您可以在PHP中填写缺失的月份,也可以在this等SQL中填写。

答案 1 :(得分:1)

使用如下查询后,您可以在PHP中执行所有操作: -

SELECT date FROM orders

如果在运行之后,例如PDOStatement::fetchAll(),你有一个名为$ dateArray的数组,其中包含数据库中的日期,那么你可以这样做: -

$countArray = ['Jan' => 0, 'Feb' => 0, 'Mar' => 0, 'Apr' => 0, 'May' => 0, 'Jun' => 0, 'Jul' => 0, 'Aug' => 0, 'Sep' => 0, 'Oct' => 0, 'Nov' => 0, 'Dec' => 0];
foreach($dateArray as $dateString){
    $date = new \DateTime($dateString);
    $countArray[$date->format('M')]++;
}

I have setup a working example here

有关DateTime classesPDO

的详细信息,请参阅PHP手册