Диапазон дат Query MySQL - PullRequest
       9

Диапазон дат Query MySQL

2 голосов
/ 05 января 2010

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

В базе данных есть поле даты и времени для «начала» и поле даты и времени для «конца».

$todays_date = date("Y-m-d 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";

Является ли это правильным способом выбора данных между двумя полями даты и времени, которые используют текущую дату в качестве ограничителя?

Спасибо

Ответы [ 5 ]

5 голосов
/ 05 января 2010

Вы можете использовать функцию timedate now в MySQL и оператор BETWEEN .

Raw SQL:

SELECT * FROM news
WHERE NOW() BETWEEN start AND end;

Примечание.которая влияет на функцию NOW (), используемую сервером, предоставляющим ваш ресурс MySQL.

2 голосов
/ 05 января 2010

Вы имеете> = в обоих условиях.

0 голосов
/ 22 августа 2011

Это работает для меня. select * from news where start between '$range1' and '$range2'

0 голосов
/ 05 января 2010

Спасибо всем, что я использовал:

select * 
from news 
where start = curdate()

Я пытался

SELECT * 
FROM news 
WHERE NOW() BETWEEN start AND end;

и это сработало почти правильно. Он не хотел показывать новостные статьи, которые начинались и заканчивались в один и тот же день в одно и то же время.

-tegan

0 голосов
/ 05 января 2010

Вы можете использовать функцию curdate () для mysql, чтобы получить дату как 2010-01-05, или now (), чтобы получить полный формат datetime 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

Ваш пробег может отличаться.

- Mark

...