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