Я знаю, что это старый вопрос, но я думаю, что это лучший способ продолжить ...
рабатываю приложение календаря. Он хранит время в двух форматах. В таблице есть следующие столбцыtitle, startDate, startTime
, Если пользователь указывает время начала и дату начала. База данных хранит метку времени UNIX (количество секунд с начала эпохи UNIX) в столбцеstartTime
в то время как startDateNULL
, Если пользователь указывает только дату начала, база данных хранит дату в форматеnnnn-mm-dd
вstartDate
а такжеNULL
в «стартовом времени». У меня есть такая структура БД, потому что время по всему миру проще отображать, потому что разные часовые пояса имеют разное летнее время.
Я хочу выбрать события, которые происходят после указанной даты. Клиентский компьютер предоставляет серверу метку времени 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')
Я просто угадываю это решение. Но так ли это?