У меня есть таблица Calendar of Events, и я хотел бы выбрать события с датами, равными или больше, чем сегодня. Когда я использую следующий оператор SELECT, он только получает события в будущем (> ТЕПЕРЬ ()):
<?php
$db->query("SELECT * FROM events WHERE event_date >= NOW()");
?>
Как я пошел бы о выборе всех событий, которые являются или сегодня или в будущем?
Спасибо
Вы ищете CURDATE ()
:
$db->query("SELECT * FROM events WHERE event_date >= CURDATE()");
Или:
$db->query("SELECT * FROM events WHERE event_date >= CURRENT_DATE()");
Причина, по которой этот запрос:
SELECT * FROM events WHERE event_date >= NOW()
... возвращает записи из будущего, заключается в том, что NOW () включает время, а также дату. И эта временная часть указывает время, когда оператор [функция или запуск] начал выполняться. Это означает, что начало дня в типе данных DATETIME выглядит так: 2010-06-24 00:00:00
(ГГГГ-ММ-ДД ЧЧ: ММ: СС, с точностью до микросекунд), что NOW () покажет что-то вроде 2010-06-24 14:24:31
...
Вот ваши варианты:
SELECT * FROM events WHERE event_date >= DATE(NOW())
SELECT * FROM events WHERE event_date >= DATE(CURRENT_TIMESTAMP)
SELECT * FROM events WHERE event_date >= CURRENT_DATE()
SELECT * FROM events WHERE event_date >= CURRDATE()
Если вас интересует только дата, а не время, используйте CURDATE () вместо NOW ()
.
Конечно, вы также можете использовать синоним CURRENT_DATE
(с круглыми скобками или без них), но документы, которые я указал, дают CURDATE
в качестве первого написания ;-).
Ваша проблема в том, что now () очень точен. Итак, даты на сегодня и раньше, потому что они начинались в начале дня.
Используйте это:
select * from events where datediff(event_date, now()) >= 0;