Оператор IF в предложении where в SQL

Я разрабатываю приложение-календарь. Он хранит время в двух форматах. В таблице есть следующие столбцы 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')

Я просто предполагаю это решение. Но так ли это?

6
задан OMG Ponies 13 May 2011 в 04:29
поделиться