Итак, я создаю сервис по продаже билетов в театр, когда кто-то хочет купить билет, клиент увидит список всех доступных спектаклей.
Доступное шоу определяется следующим образом:
- Шоу не продано
- Дата не прошла
- Время не прошло
В бэкенде есть запрос, который выглядит так, чтобы отфильтровать только предстоящие шоу
SELECT *
FROM shows
WHERE CURRENT_DATE() <= show.date
Этот запрос возвращает сегодняшние шоу и предстоящие шоу, но не фильтрует сегодняшние шоу, для которых прошло время начала. Таким образом, клиент по-прежнему может покупать билеты на уже начавшееся шоу.
То есть: сегодня 29 мая 2020 года и текущее время 21:00:00, шоу, которое мы смотрим, сегодня и начинается в 20:00:00. В существующей системе все еще можно купить билеты на это шоу, но шоу уже началось.
Запросы, подобные этому, не будут работать:
SELECT *
FROM shows
WHERE CURRENT_DATE() <= show.date AND CURRENT_TIME() <= show.time
OR
SELECT *
FROM shows
WHERE CURRENT_DATE() <= show.date OR CURRENT_TIME() <= show.time
Эти запросы не будут соответствовать указанным выше критериям, потому что первый запрос не вернет никакого шоу по истечении времени
И второй запрос не работает, потому что он также вернет более старые шоу, когда условие времени совпадает.
Есть ли у кого-нибудь идея, как написать запрос, который сначала выбирает все шоу, где дата совпадает с кодификацией, и проверяет, соответствует ли время условию. Что касается предстоящего шоу.