2012-03-31 3 views
0

У меня есть таблица MySQL с записями, начиная с 2006 года по настоящее время (и в настоящее время), все с даты и времени марокВыберите год из 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

1

более простые способы могут быть:

Вы можно использовать group_concat(), чтобы получить все сразу

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

ИЛИ

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

ИЛИ

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

+0

@mowgli, почему бы не сделать это тогда :-). – Ben

+0

Черт, я попал в дверь – mowgli

Смежные вопросы