Я разрабатываю приложение-календарь. Он хранит время в двух форматах. В таблице есть следующие столбцы title, startDate, startTime
. Если пользователь указывает время начала плюс дату начала. База данных хранит метку времени UNIX (количество секунд с момента выхода UNIX) в столбце startTime
, а startDate имеет значение NULL
. Если пользователь указывает только дату начала, база данных сохраняет дату в формате nnnn-mm-dd
в startDate
и NULL
в «startTime ». У меня есть эта структура БД, потому что легче отображать время по всему миру, потому что в разных часовых поясах разное время перехода на летнее время.
Я хочу выбрать события, которые происходят после указанной даты. Клиентский компьютер предоставляет серверу временную метку UNIX начала этого дня ( $ unix
) и дату ( $ date
) в формате nnnn-mm-dd
, чтобы выбрать правильные даты.
Проблема в том, что я не знаю, как выбрать те дни, которые происходят, как указано выше. Это решение не применимо для меня, хотя оно работает:
SELECT *
FROM events
WHERE startDate >= '$date'
OR startTime >= '$unix'
Дело в том, что в некоторых строках, где метка времени unix предоставляется в startTime
, у меня также есть дата, указанная в startDate
и другие причины, которые я не хочу объяснять. И из-за этого я не могу использовать приведенное выше решение.
Мне нужно какое-то решение, в котором есть оператор IF внутри предложения Where, например:
SELECT *
FROM events
WHERE IF(startTime = NULL, startDate >= '$date', startTime >= '$unix')
Я просто предполагаю это решение. Но так ли это?