2011-10-09 77 views
0

我想在特定的日期内每天都有我的文章计算,所以我可以获得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 '; 

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

这是为了我的网站上的日历,所以一个查询可以节省大量的处理器时间。

希望有人会帮助。谢谢。

回答

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

我不是100%确定,但这不会给天数的文章.. –

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

务必在使用前消毒的日期时间开始和结束。