2012-03-31 57 views
0

我有记录,从2006年约会到现在(和正在进行的)一个MySQL表,所有的日期时间邮票从MySQL(分页)选择年

什么是只能提取所有年份,并作出最明智的/最简单的方法每年的分页链接(动态)? 像这样:2006 2007 2008 2009 2010 2011 2012

这不是太笨拙和使用了过多的资源,对于简单的任务?:

@mysql_query("SELECT YEAR(date) AS yearonly FROM table GROUP BY yearonly"); 

回答

3

我认为您的解决方案是确定。

使用select distinct是另一种可能性

SELECT DISTINCT YEAR(date) AS yearonly FROM table 
+0

非常感谢你:) – mowgli 2012-03-31 18:11:20

1

更简单的方法可以是:

你可以使用group_concat()获得一次性

SELECT group_concat(YEAR(date),SEPARATOR '') AS years FROM table GROUP BY YEAR(date) 

OR

SELECT distinct YEAR(date,4) AS yearonly FROM table 

OR

SELECT distinct LEFT(date,4) AS yearonly FROM table 
1

这是正确的答案,只是不要忘记ORDER BY yearonly。
为获得最佳性能,如果您有大型数据集,请在日期列上创建一个索引。

1

在过去的其他建议效率并避免上万行的表无故全表扫描:

从2006年创建所有年份的表格2050(或者只要你想)。也许叫它years?然后:

select * 
    from `years` 
where `year` <= year(curdate()) 
+0

是的,这通常是我会做的。但是这个表格只有100-200条记录,所以它不是那么大,我不想处理扫描每条记录并把年份放在一个单独的表格中。但thanx – mowgli 2012-03-31 18:11:45

+0

@mowgli,为什么不这样做:-)。 – Ben 2012-03-31 18:12:21

+0

该死的,我打进了 – mowgli 2012-03-31 18:13:39