获取特定日期范围内的文章数量

时间:2011-10-09 21:21:30

标签: php mysql

我想在特定日期期间每天计算我的文章,因此我可以获得40个40天的数据。

CREATE TABLE IF NOT EXISTS `articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(255) NOT NULL,
  `author_id` int(11) NOT NULL,
  `date_added` datetime NOT NULL,
  `body` text NOT NULL,
  `description` varchar(500) NOT NULL,
  `location` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `author_id` (`author_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

我不是MySQL的专家,所以离开的地方最远的是:

$sql  = 'SELECT date_added FROM articles ';
    $sql .= 'WHERE date_added > ' . '"' . $mysql_datetime_start . '" AND ';
    $sql .= 'date_added < ' . '"' . $mysql_datetime_end . '" ';
    $sql .= 'GROUP BY date_added ';

而且我想进入循环,但单一查询必须有更好的解决方案。

这是针对我网站上的日历,因此一个查询可以节省大量处理器时间。

希望有人能提供帮助。感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用MySQL的DATE函数来区分DATETIME列的日期部分,然后按其分组。

SELECT DATE(date_added), COUNT(*) FROM articles
WHERE date_added BETWEEN $mysql_datetime_start AND  $mysql_datetime_end 
GROUP BY DATE(date_added);

答案 1 :(得分:1)

我认为这就是你要找的东西:

$sql = 
"SELECT DATE( date_added ), count(*) FROM articles 
  WHERE date_added > '" . $mysql_datetime_start . "'
  AND date_added < '" . $mysql_datetime_end . "' 
  GROUP BY DATE( date_added )"

请务必在使用之前清理日期时间的开始和结束。