2012-03-31 58 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