Мне нужен запрос для выбора данных между двумя датами с сегодняшней датой в качестве ссылки.
В базе данных есть поле даты и времени для «старта» и поля datetime для «end».
$todays_date = date("Ymd H:i:s"); $q = "SELECT * FROM news WHERE `end` >= '" . $todays_date . "' AND `start` >= '" . $todays_date . "' ORDER BY id DESC";
Проблема заключается в том, что запрос все еще тянет результаты, когда дата начала больше, чем сегодня. Итак, я изменил свой запрос, чтобы выглядеть так:
$q = "SELECT * FROM news WHERE `end` >= '" . $todays_date . "' AND `start` >= '" . $todays_date . "' AND `start` <='" . $todays_date . "' ORDER BY id DESC";
Является ли это правильным способом выбора данных между двумя полями datetime, которые используют сегодняшнюю дату в качестве ограничителя?
благодаря
Вы можете использовать функцию timedate в MySQL и оператор BETWEEN .
Исходный SQL:
SELECT * FROM news WHERE NOW() BETWEEN start AND end;
Примечание. Учитывайте часовой пояс по умолчанию, который влияет на функцию NOW (), используемую сервером, предоставляющим ваш ресурс MySQL.
У вас есть = = в обоих условиях.
Вы можете использовать функцию mysql curdate (), чтобы получить дату как 2010-01-05, или now (), чтобы получить полный формат даты и времени 2010-01-05 12:55:09. Это зависит от того, хотите ли вы найти предметы, которые начинаются сегодня или начинаются прямо сейчас.
Предполагая, что у вас нет записей, которые заканчиваются до их начала, вы можете переписать запрос как
select * from news where start = curdate()
Вероятно, неплохо также дважды проверить даты окончания. И похоже, что вы ищете список новостей, которые уже были запущены, но еще не закончены, поэтому запрос выглядит так:
select * from news where start < now() and end > now()
Вы даже можете это сделать, хотя я не тестировал его
select * from news where now() between start and end
Ваш пробег может отличаться.
–Отметка
Это работает для меня. select * from news where start between '$range1' and '$range2'
Спасибо всем, что я закончил:
select * from news where start = curdate()
Я пытался
SELECT * FROM news WHERE NOW() BETWEEN start AND end;
и он работал почти правильно. Он не хотел показывать новостные статьи, которые одновременно начинались и заканчивались в тот же день.
-tegan