#php #mysql #timestamp
#php #mysql #временная метка
Вопрос:
Я пытаюсь выбрать диапазон временных меток из базы данных mysql, и у меня возникают проблемы, понятия не имею, почему.
У меня есть таблица ‘pedido’ и поле ‘fecha’, которое задано как временная метка. У меня много записей, так что это не должно быть проблемой.
Однако, когда y выбирает с помощью этого запроса:
SELECT * FROM pedido WHERE fecha BETWEEN UNIX_TIMESTAMP('2011-10-10') AND UNIX_TIMESTAMP('2011-11-10') ORDER BY fecha DESC
Я не получаю ответа.
Спасибо за помощь
Комментарии:
1. Может быть, вы могли бы опубликовать типы полей в своей таблице?
2. @jjwdesign, тип поля равен
TIMESTAMP
Ответ №1:
MySQL не хранит данные даты / времени как целое число.
UNIX_TIMESTAP()
возвращает целое число, перечисляющее секунды с момента 1-1-1970.
Вы сравниваете даты с целым числом. Это никогда не сработает.
Перепишите запрос на:
SELECT *
FROM pedido
WHERE fecha BETWEEN '2011-10-10 00:00:00' AND '2011-11-10 23:59:59'
ORDER BY fecha DESC
Обратите внимание, что php использует unix_timestamps
, поэтому, если вы хотите сравнить в php, вам нужно либо преобразовать в unix_timestamp
в вашей SQL-инструкции, либо преобразовать в вашем php-коде.
Комментарии:
1. какая логика, когда ты это говоришь
Ответ №2:
Если ваш столбец имеет TIMESTAMP
тип, то он использует формат даты MySQL по умолчанию, А НЕ временную метку Unix. Также было бы разумно вызвать DATE(fecha)
, чтобы сравнивались только части даты, игнорируя часы, минуты, секунды.
SELECT *
FROM pedido
WHERE DATE(fecha) BETWEEN '2011-10-10' AND '2011-11-10'
ORDER BY fecha DESC
Комментарии:
1. Это уничтожит любое изменение использования индекса, кроме того,
BETWEEN
это все включено, поэтому, если вы хотите избежать этой проблемы, просто сделайте,WHERE fecha BETWEEN '2011-10-10' AND '2011-11-10 23:59:59'
это будет намного быстрее, еслиfecha
будет проиндексировано.