Mysql查询SELECT DISTINCT月/年

时间:2011-11-06 14:37:28

标签: php mysql

我正在努力为这一个找到正确的mysql查询......

我有一个名为'blog'的表,其中包含博客条目。每个条目都有一个名为“created”的日期时间列(YYYY-MM-DD HH:MM:SS)。我想在我的页面边栏上列出所有写入条目的不同月份年,以便用户可以轻松地从博客档案中找到旧条目。

我有一个用户定义的函数,我的BlogEntry类用它来查询数据库。根据查询,它返回一个记录数组。例如......

$entries = BlogEntry::find_by_sql("SELECT * FROM blog ORDER BY created DESC");

我可以使用什么查询来仅返回写入条目的不同月份?

我尝试了一些事情(没有运气),例如:

$months = BlogEntry::find_by_sql("SELECT DISTINCT MONTH(created) FROM blog");

非常感谢有关如何返回不同月份和年份的任何想法或建议!

更新: 也许我的问题是如何显示返回的记录。我一直在尝试以下......

<ul>
<?php foreach($months as $month): ?>
<li><?php echo $month->created; ?></li>
<?php endforeach; ?>
</ul>

我知道这看起来不对。我如何将其合成以列出Month-YYYY?

3 个答案:

答案 0 :(得分:6)

$months = BlogEntry::find_by_sql("SELECT DATE_FORMAT(created, '%m-%Y') AS created_month FROM blog GROUP BY created_month");

还应该做​​这个伎俩吗?

DATE_FORMAT

答案 1 :(得分:2)

你可以使用它。

select distinct(DATE_FORMAT(date,'%m-%Y')) from table_name 
where  order by DATE_FORMAT(date,'%Y') asc,DATE_FORMAT(transaction_date,'%m') asc;

答案 2 :(得分:0)

对于MySQL,如下所示使用

SELECT DISTINCT(DATE_FORMAT(update_date,'%b %Y')) as archive_dt FROM tbl_articles