我正在构建一个迷你新闻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数据类型没有输出我想要的内容,如前面提到的硬编码示例所示。
请帮忙, 谢谢!
答案 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的strtotime
和date
函数:
$date_from_querystring = "2009-10";
$start_date = $date_from_querystring . "-01";
$end_date = date("Y-m-d", strtotime($start_date . " +1 month"));
你也可以使用year
和month
函数,但是你不会从你可以使用的任何索引中获得任何好处,因此它通常不如范围。一个例子:
where year(date_posted) = 2009 and month(date_posted) = 10