Невозможно получить записи с датой и временем меньше системной даты - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь проверить, если список записей имеет datetime меньше, чем система datetime, эти записи также должны иметь поле status, равное 1 или 2. Я сделал следующее:

SELECT SUM(m2.datetime < NOW() AND m2.status IN (1, 2)) < 0 AS result 
FROM `match` m2 WHERE m2.round_id = @round_id GROUP BY m2.round_id

этот запрос не работает в следующем сценарии:

id | datetime              | status |
 1    2018-11-30 18:00:00      5
 2    2018-12-09 13:30:00      5
 3    2018-12-15 14:00:00      5
 4    2018-12-21 13:30:00      5
 5    2019-01-08 17:45:00      1

Как вы можете видеть в приведенном выше списке записей, у меня есть 4 записи со статусом 5, и у всех этих записей дата меньше текущей системы datetime. Теперь у меня есть другая запись со статусом, равным 1, у которой дата и время меньше текущего, поэтому результат запроса должен быть true, потому что есть запись, у которой status равно 1, а также имеют datetime меньше, чем система datetime. Почему запрос возвращает false?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Сравнение никогда не может возвращать меньше 0, и поскольку вы хотите вернуть true, если я вас правильно понял, сравнение не требуется, а также я не вижу необходимости в SUM, поэтому я изменил запрос на

SELECT (m2.datetime < NOW() AND m2.status IN (1, 2)) AS result 
FROM `match` m2 WHERE m2.round_id = @round_id 
0 голосов
/ 10 января 2019

Если вы хотите считать, удалите < 0.

SELECT round_id, SUM(m2.datetime < NOW() AND m2.status IN (1, 2))AS result 
FROM `match` m2
WHERE m2.round_id = @round_id
GROUP BY m2.round_id

Или, что еще лучше, переместите условие в предложение where:

SELECT COUNT(*) AS result 
FROM `match` m2
WHERE m2.round_id = @round_id AND
      m2.datetime < NOW() AND m2.status IN (1, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...