MySQL Date запрос только возвращает один год, когда существует несколько - PullRequest
1 голос
/ 19 апреля 2010

Я работаю дизайнером / разработчиком с частичной занятостью и занимаюсь фотографией с частичной занятостью. У меня есть база данных фотографий с различными кусочками метаданных. Я хочу запросить базу данных и вернуть список лет, когда были сделаны фотографии, и количество фотографий, которые были сделаны в этом году.

Короче, я хочу список, который выглядит следующим образом:

2010 (35 photos)
2009 (67 photos)
2008 (48 photos)

Вот запрос, который я использую:

SELECT YEAR(date) AS year, COUNT(filename) as quantity FROM photos WHERE visible='1' GROUP BY 'year' ORDER BY 'year' DESC

Вместо того, чтобы использовать все возможные годы (база данных включает фотографии с 2010-2008), это единственный результат:

2010 (35 photos)

Я пробовал много разных синтаксисов, но сейчас я сдаюсь и прошу помощи!

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Не заключайте в кавычки year.
Это говорит MySQL, что year является строкой; что это не так.

Кроме того, не используйте псевдоним в GROUP BY.

Попробуйте это:

SELECT YEAR(date) AS year, COUNT(filename) as quantity 
FROM photos 
WHERE visible='1' 
GROUP BY YEAR(date)
ORDER BY YEAR(date) DESC

Edit:
В большинстве РСУБД условие SELECT интерпретируется последним.
Поэтому мы не можем использовать псевдоним столбца в других предложениях этого конкретного запроса.

0 голосов
/ 20 апреля 2010

T-SQL Solution:

SELECT 
   [text] = 
      cast(year(date) as varchar) + ' ('+cast(count(filename) as varchar) + 
      'photo'+case when count(filename)>1 then 's' else '' end + ')'
   ,
   [year] = year(date)
FROM photos 
WHERE  visible='1' 
GROUP BY YEAR(date)
ORDER BY YEAR(date) DESC
...