2014-01-22 2 views
1

просто нужно немного помочь здесь. Надеюсь, вы можете помочь мне с моей простой проблемой.Как создать запрос диапазона дат, используя временную метку Mysql?

У меня есть таблица, состоящая из данных магазинов. На моей странице PHP пользователь может зарегистрировать свои магазины. И при регистрации день, когда пользователь зарегистрировал свою учетную запись, будет сохранен в таблице базы данных и будет отформатирован как TIMESTAMP.

У меня нет проблем с этим. На моей бэкэнд-странице есть форма для метода предварительного поиска. В моей форме есть поле выпадающий и рядом с ним есть DatePicker, который форматирует, как мм/дд/гггг поэтому у меня 2 DatePicker для того, что является от и к.

Моя проблема:

Я отформатировал результат Datepicker с помощью функции StrToTime() в PHP. И у меня есть такой запрос.

$query = "SELECT * FROM shops 
      WHERE status = '".$status."' 
      AND registered BETWEEN ('".$from." AND ".$to."')"; 

Пример вывода запроса является:

SELECT * FROM shops WHERE status = 'P' AND registered BETWEEN ('1388505600' AND '1391097600'); 

Теперь у меня есть результат временных меток для $ от $ и до. Как я могу отфильтровать его в mysql?

ОК, и все. Заранее спасибо.

ответ

1

Вам нужно удалить кавычки вокруг временных меток, и вам нужно использовать FROM_UNIXTIME(), если столбец registered не находится в UNIX-времени уже.

+0

К сожалению моя вина. Спасибо за напоминание. – Jerielle

+0

Это совсем не поможет в том, что все еще необходимо преобразовать временную метку unix и форматы datetime MySQL. –

+0

Да, я этого не осознавал. –

1

Я думаю, вам нужно использовать FROM_UNIXTIME

$query = "SELECT * FROM shops WHERE status = '".$status."' AND registered BETWEEN FROM_UNIXTIME(".$from.") AND FROM_UNIXTIME(".$to.")"; 
+0

Хорошо, я попробую. Благодарю. – Jerielle

3

Вы должны фактически форматировать правильный формат YYYY-MM-DD строки в PHP.

В основном редко возникает причина работать с отметками времени UNIX в MySQL.

Так что-то вроде этого для каждого из ваших DatePicker в/из значений:

$to_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_to); 
$to = $to_datetime->format('Y-m-d'); 
$from_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_from); 
$from = $from_datetime->format('Y-m-d'); 

И затем использовать их в запросе:

$query = "SELECT * FROM shops 
      WHERE status = '".$status."' 
      AND registered BETWEEN ('".$from."' AND '".$to."')"; 

Обратите внимание, что я использовал PHP DateTime класс, который я бы очень рекомендовал, когда вы переходите к инструменту для обработки дат в PHP (наряду с его родственными классами, такими как DateInterval, DatePeriod, DateTimeZone и т. д.)

+0

Спасибо, сэр Майк, за очень информативный ответ. Я попробую сейчас и изучу этот код для моей справки. Благодарю. – Jerielle

+0

Сэр У меня есть ошибка 'Неустранимая ошибка: вызов функции-члена функции() для не-объекта в' – Jerielle

+0

@Jerielle Кажется, что создание объекта DateTime не сработало (хотя это должно было вызвать исключение). Можете ли вы рассказать мне, какое значение вы передаете для '$ datepicker_to' или' $ datepicker_from' (в зависимости от того, на что вы получили ошибку)? У вас есть опечатка? –

1

PHP

// $t is the value you got from strtotime() 
$FormattedDateTime = date('Y-m-d H:i:s', $t) 
+1

Вам действительно нужна «Y-m-d H: i: s» для совместимости с MySQL. –

+0

Я исправил это, спасибо @Mike Brant. – Mehdi

Смежные вопросы