创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数
Posted
技术标签:
【中文标题】创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数【英文标题】:Create PHP arrays with dates and number of orders extracted by month from SQL 【发布时间】:2013-12-17 14:54:18 【问题描述】:我有一个名为“订单”的表,其中包含不同日期的多行。
我想构建一个包含每月订单数的图表,所以我需要查询一个如下所示的数组:
一月------- 3 2 月 ------- 1 三月------- 0 四月 ------- 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)
【问题讨论】:
SELECT COUNT(*) FROM orders GROUP BY month(date) ....结果是什么 这个问题解释了如何在 MS SQL 中做你想做的事情的概念:Include missing months in Group By query 创建一个将月份列为键的数组,然后使用 SQL 的结果填充值。 【参考方案1】:您的查询应该是这样的:
SELECT DATE_FORMAT(`date`, '%Y%m') AS `Ym`, COUNT(*) AS `count`
FROM `orders`
GROUP BY `Ym`
demo
附言您可以使用 php 或 SQL (如this)填充缺失的月份。
【讨论】:
这个看起来很棒。我怎样才能只将计数分配给数组'$data1y=array()'? 我正在获取类似:“$orders = $ordersQuery->fetchAll(PDO::FETCH_ASSOC)” 数组 ( [0] => 数组 ( [Ym] => 十二月 [count] => 7 ) [1] => 数组 ( [Ym] => 十一月 [count] => 11 ) [2] => 数组 ( [Ym] => 十月 [count] => 9 ) [3] => 数组 ( [Ym] => 九月 [count] => 8 ) [4] => 数组 ( [Ym] => 八月 [count] => 9 ) [5] => 数组 ( [Ym] => 七月 [count] => 1 ) [6] => 数组 ( [Ym] => 五月 [count] => 2 ) [7] => 数组([Ym] => 四月 [count] => 1)) 那太好了,但我使用的是 PHP 5.2,所以不支持 DateTime::createFromFormat... @samyb8:然后像this example 一样创建 SQL 查询,这应该适用于 5.2。【参考方案2】:使用如下查询后,您可以在 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 classes 和PDO 的更多信息,请参阅PHP 手册。
【讨论】:
以上是关于创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数的主要内容,如果未能解决你的问题,请参考以下文章