#php #mysql
#php #mysql
Вопрос:
Любая помощь высоко ценится.
Допустим, у меня есть база данных MySQL со столбцом метки времени со значением «1305590400», как я могу сравнить это с переменной PHP, скажем, «2011-05-17»? Я хочу полностью игнорировать временную часть и сравнивать только дату.
На данный момент я пытаюсь заставить ее работать со следующим, но она не возвращает результатов:
WHERE FROM_UNIXTIME('timestamp_column','%Y-%m-%d') = '" . $date. "'
Ответ №1:
Вы не получаете результаты, которые, вероятно, $date
имеют некоторое смещение по времени и не равны 00:00:00
вашему часовому поясу.
WHERE timestamp_column BETWEEN '" . strtotime($date) . "' AND '" . strtotime($date, ' 1 day') . "'
или, если быть более точным:
WHERE timestamp_column >= '" . strtotime($date) . "'
AND timestamp_column < '" . strtotime($date, ' 1 day') . "'
Комментарии:
1. Столбец timestamp_column содержит случайные значения времени, есть ли способ игнорировать время и просто сравнивать дату?
2. @David: вот почему я добавил
BETWEEN
. Текущий запрос извлекает все данные между сегодняшним полуднем и завтрашним полуднем3. Единственная проблема, с которой я сталкиваюсь, заключается в том, что я использую это в скрипте календаря, и я не думаю, что это вернет правильные результаты, хотя я определенно попробую это сейчас.
Ответ №2:
Комментарии:
1. Как mysql использует индексы
2. Я предполагаю, что эта ссылка убедит меня в том, что мое решение работает медленнее, я прав? ^^
3. да. Ваш запрос всегда будет вызывать fullscan. Если у вас много строк и вам нужно быстро найти — не применяйте функции для полей в вашем
WHERE
.
Ответ №3:
Вы всегда можете преобразовать временную метку в форматированную дату.
SELECT FROM_UNIXTIME(1358871753,'%Y %D %M');
Дата выпуска: 22 января 2013 года