Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将月份拆分为周并按组使用_Php_Mysql_Date_Datetime - Fatal编程技术网

Php 将月份拆分为周并按组使用

Php 将月份拆分为周并按组使用,php,mysql,date,datetime,Php,Mysql,Date,Datetime,这是一个我在任何地方都找不到答案的问题。可以给你。 我有两个日期范围(这个月和最后一个月) 上月-2015年1月1日(2015年1月1日)至2015年1月31日 本月-2015年2月1日(2015年2月1日)至2015年2月28日 现在,每个月有几个星期。我有一个表,其中创建了一列。我希望每周将所有记录提取到一个数组中(绘制一个图),并使用它们相应的总和(值)或计数(值) 所以会是这样的: 上月: 第1-25周 第2-34周 等等 本月: 第1周:55 第2周:56 等等 日期在以下格式中创建:

这是一个我在任何地方都找不到答案的问题。可以给你。 我有两个日期范围(这个月和最后一个月)

上月-2015年1月1日(2015年1月1日)至2015年1月31日 本月-2015年2月1日(2015年2月1日)至2015年2月28日

现在,每个月有几个星期。我有一个表,其中创建了一列。我希望每周将所有记录提取到一个数组中(绘制一个图),并使用它们相应的总和(值)或计数(值)

所以会是这样的: 上月: 第1-25周 第2-34周 等等

本月: 第1周:55 第2周:56 等等


日期在以下格式中创建:2015-07-21 01:27:14(Y-m-d H:i:s)

MySql
中,您可以使用
WEEK()
获取周数(从1到53)

O您可以使用
WEEKDAY()
DAYOFWEEK()
星期一的第一个bigins,星期天的第二个bigins

您可以通过和拥有

比如:

SELECT count(*)
FROM `YourTable` 
WHERE `created_at` >= '2015-10-01' AND `created_at`< '2015-11-01'
GROUP BY WEEK(`created_at`)

(试着调整它以适应您的需要)

您需要做的是每周分组,然后对值求和。下面是一个简单的示例,说明了它的工作原理:

SELECT DATE_FORMAT(created_at,'%Y-%V') as interval, SUM(units_sold) as total_sold
FROM sales 
GROUP BY DATE_FORMAT(created_at,'%Y-%V')
您将得到的是年份蚂蚁周数(例如2015-50年)和该间隔的总和

像这样的桌子:

SELECT count(i.created_at)
FROM
(SELECT DATE_FORMAT(DATE_ADD('2015-12-01', INTERVAL -n.id DAY), '%Y-%m-%d') AS AllDays
             FROM numbers n) AS DaysOfMonth
Left Join
YourTableName i
ON STR_TO_DATE(i.created_at, '%Y-%m-%d') = DaysOfMonth.AllDays
GROUP BY WEEK(AllDays)
+----+------------+---------------------+
| id | units_sold |     created_at      |
+----+------------+---------------------+
|  1 |          2 | 2015-01-01 09:00:00 |
|  2 |          4 | 2015-01-04 10:00:00 |
|  3 |          1 | 2015-01-12 12:00:00 |
|  4 |          4 | 2015-01-16 13:00:00 |
+----+------------+---------------------+
将导致:

+----------+------------+
| interval | total_sold |
+----------+------------+
| 2015-01  |          6 |
| 2015-03  |          5 |
+----------+------------+

我认为这对你很有用

SELECT GROUP_CONCAT(id), COUNT(id) AS idcount,SUM(id) AS idsum,
MONTHNAME(order_created_date) AS month_name, WEEK(order_created_date) 
AS weeks  FROM orders GROUP BY WEEK(order_created_date) 

请发布数据结构并展示您迄今为止所做的尝试。您是否始终拥有某一周的数据?您是否需要输出一周内总和和计数为0且没有记录的行?选择DATE_格式(创建时间,'%Y-%V')作为intrvl,计数(不同id)作为用户组中的记录按日期_格式(创建时间,'%Y-%V')它给我一年中各周的年和周数以及总数,我想找到所有新注册(计数(不同id)作为新记录)。例如,使用PHP,$nmFrom=date(“Y-m-dh:i:s”,strotime(“上个月的第一天”);$nmTo=date(“Y-m-dh:i:s”,strotime(“上个月的最后一天”));您可以使用不同的分组。尝试使用
%Y-%m
,它将按月分组。我特别需要按周分组。如果您按周需要,您可以使用我发布的内容。我们是否可以修改它,以便在count(*)处返回0或null那一周是零吗?@kirobo我不确定,但我想你需要一个每周都有循环的存储过程来完成你的要求。否则你可以使用
UNION
每周重复查询,或者使用
php
提取每个周末都无法解决的问题。这太简单了。我觉得太愚蠢了。说我需要创建一个表,为什么这是一项如此简单的任务,为什么我需要创建一个表?@kirobo非常好的解决方法:)。您需要创建的表使您能够通过加入来获得每周的结果(即使您使用的表中没有记录)them@kirobo我给你加了一些提示