我的架构中有以下关系:
Entries:
entryId(PK) auto_inc
date date
为了计算关系中的总条目,我在我的php中使用了一个查询:
$sql = mysql_query("SELECT COUNT(*) as Frequency FROM Entries WHERE date = '$date'");
我的问题是如何计算当前月份的参赛作品数量。
答案 0 :(得分:1)
您需要基于日期列的查询之间的查询。
在哪个日期BETWEEN startdate AND enddate。
Between等于date> = startdate AND date< = enddate。当然也可以使用> = AND<显然会简化它,因为你不需要找到一个月的最后一天,而只需要使用DATE_ADD(...,INTERVAL 1 MONTH)来查找下个月的第一天。
然而,在这种情况下,startdate和enddate将从CURDATE()派生。
您可以使用CURDATE(),MONTH(),DATE_ADD和STR_TO_DATE来推导您需要的日期(当月的第一天,当月的最后一天)。本文解决了类似的问题,所有需要的技术都显示在您应该能够适应的示例中:
http://www.gizmola.com/blog/archives/107-Calculate-a-persons-age-in-a-MySQL-query.html
当月的第一天明显是一年(CURDATE()) - 01。您可以使用DATE_ADD将1个月添加到当月的第一天,然后DATE_ADD -1天计算的最后一天。
最新情况: 好的,我去制定了完整的查询。不要认为str_to_date确实需要获得索引效率,但实际上没有检查。
SELECT count(*)
FROM entries
WHERE `date` BETWEEN
CONCAT(YEAR(CURDATE()), '-', MONTH(CURDATE()), '-', '01')
AND
DATE_ADD(DATE_ADD(CONCAT(YEAR(CURDATE()), '-', MONTH(CURDATE()), '-', '01'), INTERVAL 1 MONTH), INTERVAL -1 DAY);
答案 1 :(得分:0)
试试这个
SELECT COUNT(1) AS `Frequency`
FROM `Entries`
WHERE EXTRACT(YEAR_MONTH FROM `date`) = EXTRACT(YEAR_MONTH FROM CURDATE())
修改:将NOW()
更改为CURDATE()
,因为此处更合适
答案 2 :(得分:0)
尝试
$sql = mysql_query("SELECT COUNT(*) as Frequency FROM Entries WHERE MONTH(date) = MONTH(NOW()) );