выбор диапазона временных меток mysql

#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 будет проиндексировано.