【问题标题】:mysql | count records grouped by timemysql |按时间分组计数记录
【发布时间】:2014-12-19 02:01:04
【问题描述】:

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

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

要在指定月份从数据库中获取记录,我可以使用以下代码:

$sql = 'SELECT COUNT(id) FROM `#__records` WHERE MONTH(date)=1 AND YEAR(date)=2010';

创建按月获取数据的请求很热门吗? 谢谢!

【问题讨论】:

    标签: php mysql datetime aggregate-functions


    【解决方案1】:

    您可以使用适当的GROUP BY 查询直接在 SQL 中执行此操作。

    诀窍就是这个小表情。给定任何 DATE 或 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'))
    

    这会为最近十二个月的每一个月返回一行。

    这里有关于这种摘要查询的更广泛的文章。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/

    【讨论】:

    • 如果你尝试SELECT id, DATE(DATE_FORMAT(date, '%Y-%m-01')) FROM table,你会得到什么?你得到正确的月初日期吗?另外,也许你应该在反引号中包含列名date,因为它是一个保留字。
    【解决方案2】:

    试试这个

    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);
    

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 2015-04-26
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多