2010-12-09 2 views
3

На веб-сайте, на котором я сейчас работаю, есть панель, показывающая данные, введенные в течение предыдущей недели различными пользователями. Я выбираю эти данные с помощью простого ИНЕКЕ:Номера недель в MySQL и Новый год

SELECT * FROM table WHERE WEEK(date, 1) = WEEK(CURDATE(), 1) - 1

Однако, Новый год скоро, а когда пользователь пытается просмотреть панель на, например, третий или 4-го января, мой код явно собирается дать мне неправильный результат, потому что число на прошлой неделе 2010 года равно 52. Итак, что было бы лучшим способом изменить мой запрос, чтобы принять во внимание изменение года. Кроме того, было бы здорово сделать выбор для ввода данных, введенных 2, 3, 4, ... недели назад.

ответ

3

Как насчет выбора WEEK дня семь дней назад?

WHERE WEEK(date, 1) = WEEK(CURDATE() - INTERVAL 1 WEEK, 1) 

Таким образом, вы можете выбрать данные, вводимые 2,3,4 недели назад:

WHERE WEEK(date, 1) = WEEK(CURDATE() - INTERVAL 2 WEEK, 1) 
+0

Это похоже на то, что я искал для! Большое спасибо! – parrker9 2010-12-09 13:07:36

+0

У меня это написано (за исключением второго аргумента, который дает мне ошибку - Операнд должен содержать 1 столбец), но этот запрос дает мне данные за все годы на данную неделю. Я бы хотел выбрать только в прошлом году, учитывая, что 3 недели назад был только в 2012 году. – 2013-01-08 09:59:43

-1

Почему вы не можете использовать:

WHERE date between date_add(CurDate() - INTERVAL 1 WEEK) and CurDate()