Intereting Posts
Codeigniter: ошибка при загрузке модели подмодуля HMVC Когда я отлаживаю php с переменной var_dump, он всегда выводит путь к файлу в начале? Как обновить переменную SESSION с помощью jQuery + AJAX, возможно ли это? Рекомендация для интеграции nodejs с приложением php как изменить значение по умолчанию, отправленное по почте: адрес в php mail () Как обновить значения в моей БД новыми значениями из тегов <select> и <input>? PHP: iPad не воспроизводит видеоролики MP4, поставляемые PHP, но при непосредственном доступе он делает Как передавать данные с Javascript на PHP и наоборот? Обработка экранированных косых черт в строке JSON Какова наилучшая практика для PHP постоянно проверять изменения в базе данных? Выбор PHP / MYSQL с помощью mysqli_query Максимальное значение float в php Как анализировать данные GET URL, имеющие URL-адрес, хранящийся в переменной? Чтение PHPExcel – требуется помощь Поиск elasticsearch в laravel 5.1

Запрос диапазона дат MySQL

Мне нужен запрос для выбора данных между двумя датами с сегодняшней датой в качестве ссылки.

В базе данных есть поле даты и времени для «старта» и поля 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