MySQL DATE类型的每月类别

时间:2009-10-25 00:16:23

标签: php mysql date

我正在构建一个迷你新闻CMS,其中添加的新闻使用DATE类型列进行排序,例如INSERT date_posted=NOW()等等。

然后,我可以使用SELECT DATE_FORMAT(date_posted, '%M %Y') as date_posted轻松列出所有可用月份。这是月度类别列表。

我遇到的问题是在特定月份显示所有新闻。我试图在URL中传递date_posted变量,但未能将其实际合并到我的Query中。例如,如果我尝试WHERE date_posted=\"2009-10-16\",结果就是当天的所有新闻。另一方面WHERE date_posted=\"2009-10\"不起作用。

我在URL DATE_FORMAT(date_posted, '%M%Y') as month中传递了这个参数,例如,2009年10月发布了这个参数。然后WHERE date_posted = $ month什么也没有返回,因为首先我猜测它的格式错误,其次,MySQL数据类型没有输出我想要的内容,如前面提到的硬编码示例所示。

请帮忙, 谢谢!

1 个答案:

答案 0 :(得分:3)

您应该在where子句中使用范围:

where   date_posted >= cast('2009-10-01' as date)
    and date_posted <  cast('2009-11-01' as date)

要获得“2009-10-01”和“2009-11-01”日期,您可以使用PHP的strtotimedate函数:

$date_from_querystring = "2009-10";
$start_date = $date_from_querystring . "-01";
$end_date = date("Y-m-d", strtotime($start_date . " +1 month"));

你也可以使用yearmonth函数,但是你不会从你可以使用的任何索引中获得任何好处,因此它通常不如范围。一个例子:

where year(date_posted) = 2009 and month(date_posted) = 10