我正在制作博客,我希望能够根据帖子的添加日期过滤结果。这些帖子的日期时间格式为2013-11-15 04:08:03。现在我想点击几个月的列表,所以让我说我点击11月它应该显示11月的所有帖子,但我不确定如何从上面的时间中提取月份然后将其添加到查询中。
到目前为止我所得到的是几个月的清单。你选择一个月份通过月份的数值,即1月= 01.现在一切正常,我可以回应它在网页上工作,但我怎么把它与Y / m /链接d以便01选择01月的所有条目?
我认为这会像选择所有m =所选月份(m是y / m / d中的m)。
答案 0 :(得分:1)
要获得您发布帖子的所有月份,您可以运行以下简单查询:
SELECT
DATE_FORMAT(`date_field`, '%Y%m') AS `id`,
DATE_FORMAT(`date_field`, '%M %Y') AS `title`
FROM
`posts_table`
GROUP BY
DATE_FORMAT(`date_field`, '%Y%m')
ORDER BY
`date_field` DESC
当您获取今年 - 月份时,请创建从先前查询中获取的id
的链接,例如:
echo '<a href="....?month=' . $row['id'] . '">' . $row['title'] . '</a>';
# <a href="....?month=201311">November 2013</a>
当用户登陆此链接时,请获取GET参数并选择本月的所有帖子:
SELECT *
FROM `posts_table`
WHERE DATE_FORMAT(`date_field`, '%Y%m') = ?
?
应选择月份,例如201311
。但是,如果您在date_field
上有一些索引,则应使用BETWEEN
,以便应用索引:
$selected = '201311';
$from = new DateTime("{$selected}01");
$sql = "
SELECT *
FROM `posts_table`
WHERE `date_field` BETWEEN ? AND ?
";
// first ? should be $from->format('Y-m-d 00:00:00');
// second ? should be $from->format('Y-m-t 23:59:59');