2011-11-06 138 views
1

我在努力为这个数字找出正确的mysql查询...Mysql查询SELECT DISTINCT月/年

我有一个名为'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> 

我知道这看起来不正确。我怎么能把它列入月份 - YYYY?

+0

见我的回答的更新:现在在查询输出的格式应该是你的愿望是什么? – aleroot

回答

6

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

应该这样做吗?

DATE_FORMAT

+0

查询不工作,但我的问题是我怎么显示的记录。如果可以的话,请看我的更新...有什么建议吗? – bar1024

+0

固定。你可以在这里修改:'DATE_FORMAT(创建,'%m-%Y')' –

+0

正是我在找什么也知道日期的长度不会改变很长一段时间:)但不会要更干净? 'SELECT DATE_FORMAT(created,'%m-%Y')as createdshort FROM posts GROUP BY createdshort' – Ergec

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;