#php #mysql #timestamp #unix-timestamp
#php #mysql #временная метка #unix-временная метка
Вопрос:
Я пытаюсь узнать, сколько партнеров было добавлено по месяцам за последние 12 месяцев, и у меня есть этот запрос:
SELECT COUNT(n.nid) AS expression FROM node n
WHERE (FROM_UNIXTIME(created) >= '2014-07-01')
AND (FROM_UNIXTIME(created) <= '2014-07-31')
AND (n.type = 'partner')
AND (n.status = 1)
Итак, у меня есть один запрос на каждый месяц, и проблема заключается в том, что когда я вставляю партнера в первый или последний день месяца, это не учитывается, даже если я использую операторы <= и>= .
Кто-нибудь имеет представление о том, что может быть причиной этого?
Заранее спасибо!
Комментарии:
1. В каком формате хранится ваше
created
поле? Я бы не использовалFROM_UNIXTIME
для сравнения дат.2. Вам не нужно
FROM_UNIXTIME
вWHERE
предложении. Попробуйте удалить его.3. Вашей информации в этом вопросе недостаточно для полной диагностики проблемы. Вы должны лучше предоставить нам инструкцию определения таблицы с типом данных
created
поля, как просил Сэм. Далее нам нужныINSERT
инструкции для обоих особых дней. У меня есть объяснение для последнего дня месяца, это достаточно просто: представьте, что FROM_UNIXTIME дает вам2014-07-31 19:58:30
значение, не меньшее или равное2014-07-31
. Первый день месяца может быть вызван несоответствием часового пояса времени UTC.4. Извините, ребята. Созданное поле является временной меткой.
5. Тогда я не понимаю, что ваш запрос работает со вставками в другие дни.
SELECT FROM_UNIXTIME(NOW()) as mytest;
выдаетNULL
в качестве результата, потому что временная метка MySQL не является временной меткой UNIX. Вы можете использовать напрямуюWHERE (created >= '2014-07-01') AND ...
, как сказал superphonic. Чтобы обойти проблему, о которой я упоминал в своем последнем комментарии, вы могли бы использовать(created < '2014-08-01')
вместо этого. Если вы используете столбец вместо вычисляемого значения, MySQL может использовать индекс, если он есть.
Ответ №1:
Существует функция UNIX_TIMESTAMP, которая преобразует форматированное значение 0000-00-00 00:00:00 в целое число временной метки Linux.
Вы можете использовать это: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp
Я прав, вы хотите сравнить даты. Если нет, пожалуйста, проигнорируйте этот ответ