2012-04-02 53 views
0

好吧,我有我已经与他们datetime其保存在我的MySQL日期时间字段我的所有用户注册为2012-03-31 12:13:42数据库,现在我想获取的COUNT用户根据yearmonth如何根据特定月份和今年的MySQL PHP获取数据

由于我想为此目的提供图表数据,我希望在Januaryfebmarch等等中添加总客户....在特定年份。

即它必须是year specific2010Jan可以说52客户2010Feb可以说72客户

注意:我想要执行的查询是使用PHP和Mysql。

回答

7

您可以使用MySQL日期函数

SELECT YEAR(date_field) as stat_year, 
     MONTH(date_field) as stat_month, 
     COUNT(*) as stat_count 
FROM `table` 
GROUP BY stat_year,stat_month 

如果你只想要一个特定年/月的结果,您可以添加条件,WHERE子句(和删除GROUP BY)这样

SELECT COUNT(*) as stat_count 
FROM `table` 
WHERE YEAR(date_field) = 2012 
    AND MONTH(date_field) = 3 
+0

什么是date_field?我有我的mysql字段作为'datetile',所以它存储值'2012-03-31 12:13:42' .... – 2012-04-02 06:26:16

+0

这是他用来指存储日期的字段的名称。你没有提供它,所以他用它作为占位符。只需将'date_field'替换为您给出该字段的任何名称即可。 – MichaelRushton 2012-04-02 06:44:49

+0

是其实'datetime':P – 2012-04-02 06:45:23

1

有不同的SQL,会做的伎俩,这里是一个...

SELECT COUNT(dt), DATE_FORMAT(dt, '%Y-%b') AS df FROM foo GROUP BY df; 

其中foo是你的表名,dt是datetime列。请注意,这将在每行上应用DATE_FORMAT函数。此外,你可以根据需要改变格式,例如在数字月份中使用%m,在完整月份名称中使用%M等。根据需要添加where子句以进行过滤。下面的SQL几乎是一样的...

SELECT COUNT(dt), YEAR(dt) AS y, MONTH(dt) AS m FROM foo GROUP BY y, m; 
+0

这里是什么'df'?这是一个错字..? – 2012-04-02 06:51:44

+0

这是我用于选择字段DATE_FORMAT(dt,'%Y-%b')的别名。请注意,您可以别名选择输出字段名称,例如SELECT COUNT(*)AS cnt,... – Herbie 2012-04-02 07:41:33