Php mysql |统计按时间分组的记录

Php mysql |统计按时间分组的记录,php,mysql,datetime,aggregate-functions,Php,Mysql,Datetime,Aggregate Functions,我有一个获取日期数组的代码(本月-12): 是否要创建每月获取数据的请求? 谢谢 试试这个 for ($i = 0; $i <= 11; $i++) { $months[] = date("Y-m", strtotime( date( 'Y-m-01' )." -$i months")); } $count = sizeof($months); for($i=0;$i<$count;$i++) { $sql = 'SELECT COUNT(id) AS id

我有一个获取日期数组的代码(本月-12):

是否要创建每月获取数据的请求? 谢谢

试试这个

for ($i = 0; $i <= 11; $i++) {
    $months[] = date("Y-m", strtotime( date( 'Y-m-01' )." -$i months"));
}

$count = sizeof($months);

 for($i=0;$i<$count;$i++)
 {
    $sql = 'SELECT COUNT(id) AS id FROM `#__records` WHERE MONTH(date)='".$months[$i]."' AND YEAR(date)=2010';
    $result = mysql_query($sql);
    if($result)
{
$data_array = array();
    $data = mysql_fetch_assoc($result);
    if($data)
    {
        $data_array[] = array($data['id']);
    }
}
}
print_r($data_array);

对于($i=0;$i您可以在SQL中通过适当的
GROUP BY
查询直接执行此操作

诀窍在于这个小表达式。给定任何日期或DATETIME`,它会产生一个月的第一天

DATE(DATE_FORMAT(datevalue, '%Y-%m-01'))
查询经常使用这个公式来解决问题

试试这个:

SELECT COUNT(id) AS idcount,
       DATE(DATE_FORMAT(date, '%Y-%m-01')) AS month_beginning
  FROM table
 WHERE date >= DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) - INTERVAL 12 MONTH
   AND date <  DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) + INTERVAL 1 MONTH
  GROUP BY DATE(DATE_FORMAT(date, '%Y-%m-01'))
  ORDER BY DATE(DATE_FORMAT(date, '%Y-%m-01'))
选择COUNT(id)作为idcount,
日期(日期格式(日期,%Y-%m-01'))为月初
从桌子上
其中日期>=日期(日期格式(现在为(),“%Y-%m-01”)-间隔12个月
日期<日期(日期\格式(现在(),“%Y-%m-01”)+间隔1个月
按日期分组(日期格式(日期,%Y-%m-01'))
按日期排序(日期格式(日期,%Y-%m-01'))
这将为最近12个月的每个月返回一行


这里有一个关于这种摘要查询的更广泛的描述。

如果您尝试从表
中选择id,DATE(DATE_格式(DATE,%Y-%m-01'),您会得到什么?您是否获得了正确的月初日期?另外,可能您应该在backticks中包含列名
DATE
,因为它是一个保留字。
DATE(DATE_FORMAT(datevalue, '%Y-%m-01'))
SELECT COUNT(id) AS idcount,
       DATE(DATE_FORMAT(date, '%Y-%m-01')) AS month_beginning
  FROM table
 WHERE date >= DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) - INTERVAL 12 MONTH
   AND date <  DATE(DATE_FORMAT(NOW(), '%Y-%m-01')) + INTERVAL 1 MONTH
  GROUP BY DATE(DATE_FORMAT(date, '%Y-%m-01'))
  ORDER BY DATE(DATE_FORMAT(date, '%Y-%m-01'))