#mysql
#mysql — сервер #mysql
Вопрос:
У меня есть поле, date_confirmed
которое является datetime
.
Таким образом, примером содержимого было бы
2011-01-03 20:54:41
Предложение where, которое я создал для извлечения последних строк из этой таблицы на основе date_confirmed
, выглядит следующим образом…
WHERE DATEDIFF(g.date_confirmed, CURDATE()) <= 28
Я использую PHP с MySQL, и я хочу извлекать только строки, в date_confirmed
которых дата меньше 28 дней.
Может ли кто-нибудь помочь мне / указать мне лучшее направление?
Спасибо.
Комментарии:
1. В чем проблема, с которой вы столкнулись? Ваше использование
DATEDIFF()
правильно. Если вы получаете отрицательный результат, измените аргументы на противоположные или преобразуйте его вABS()
для абсолютного значения2. Какой пончик, не сказал, в чем проблема. Он отображает строки, которым более 28 дней.
3. Или попробуйте это — ГДЕ DATEDIFF(CURDATE(), g.date_confirmed)
Ответ №1:
Ну, вы не говорите, что не работает, но я думаю, что вы, возможно, имели в виду изменить параметры:
WHERE DATEDIFF(CURDATE(), g.date_confirmed) <= 28
поскольку у вас это было, CURDATE()
(я предполагаю) всегда было бы более свежим, чем g.date_confirmed
и, следовательно DATEDIFF()
, всегда возвращало бы отрицательное число — и, следовательно, всегда было <= 28
Ответ №2:
Я думаю, вы захотите сменить на:
WHERE DATEDIFF(g.date_confirmed, CURDATE()) <= -28
Согласно документации здесь (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff ) если второй аргумент является более свежим, чем первый аргумент, результирующее число будет отрицательным. Поскольку я предполагаю, что текущая дата является более поздней, чем ваша сохраненная дата, я предполагаю, что именно это здесь и происходит.
Комментарии:
1. Это не сработало, но когда я изменил параметры, это сработало. Спасибо.
2. Я думаю, вы имеете в виду > = -28, что также сработало бы — но замена аргументов понятнее!
Ответ №3:
Мне всегда кажется более понятным писать это как
WHERE g.date_confirmed >= DATE_SUB( CURDATE(), INTERVAL 28 DAY )
… особенно там, где в моей записи может быть несколько столбцов даты, я думаю, это проясняет, с каким полем даты я сравниваю.