Comapring DATE_ADD с NOW не работает на MySQL - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь сравнить DateTime в MySQL.

Таблица предназначена для проверки заблокированных пользователей. Например, пользователь будет заблокирован на 1 Day в DateTime 2020-04-09 14:51:32:

SELECT
    *,
    DATE_ADD(`time_created`, INTERVAL `locked_time` DAY) AS `until`
FROM
    `' . DATABASE_PREFIX . 'users_locked`
WHERE
    `user_id`=:user_id
LIMIT 1

until - это дата и время time_created с добавленными днями с locked_time.

Вот результат записей:

object(stdClass)[53]
  public 'id' => string '1'
  public 'user_id' => string '2'
  public 'locked_by' => string '1'
  public 'time_created' => string '2020-04-09 14:51:32'
  public 'locked_time' => string '1'
  public 'reason' => string 'This is a test'
  public 'until' => string '2020-04-10 14:51:32'

Расчет (time_created с добавлением locked_time с результатом 2020-04-10 14:51:32) выполнен правильно. Но когда я пытаюсь сравнить это значение с текущей меткой времени (например, NOW()), я не получаю никаких результатов - использую ли я >= или <=:

[...]
WHERE
    `user_id`=:user_id
AND
    `until`<=NOW()
LIMIT 1
[...]
WHERE
    `user_id`=:user_id
AND
    `until`>=NOW()
LIMIT 1

Как я могу проверить, является ли дата 'до' в пределах 'СЕЙЧАС () `?

1 Ответ

1 голос
/ 09 апреля 2020

Выражения, определенные в предложении SELECT, недоступны в предложении WHERE (последнее оценивается перед первым). Вам нужно будет повторить выражение:

SELECT
    *,
    DATE_ADD(`time_created`, INTERVAL `locked_time` DAY) AS `until`
FROM
    `' . DATABASE_PREFIX . 'users_locked`
WHERE
    `user_id`=:user_id
     AND DATE_ADD(`time_created`, INTERVAL `locked_time` DAY) >= NOW()
LIMIT 1
...