我正在开发一个日历应用程序,它以两种格式存储时间。该表格具有以下列:
标题、开始日期、开始时间
。如果用户提供了开始时间和开始日期,则数据库会在startTime
列中存储UNIX时间戳(自UNIX时代以来的秒数),而startDate
为NULL
。如果用户只提供了开始日期,则数据库会在startDate
中以nnnn-mm-dd
格式存储日期,并在startTime
中存储NULL
。我采用这种DB结构,因为这样更容易在世界各地显示时间,不同的时区有不同的夏令时。
我想选择在指定日期之后发生的事件。客户端计算机向服务器提供一天的UNIX时间戳($unix
)和以nnnn-mm-dd
格式的日期($date
)以选择正确的日期。
问题是,我不知道如何选择那些按上述方式发生的日期。即使下面的解决方法可行,但对于我来说也不适用:
SELECT *
FROM events
WHERE startDate >= '$date'
OR startTime >= '$unix'
问题是,有些行提供了Unix时间戳作为startTime
,还提供了startDate
的日期以及其他我不想解释的原因。因此,我无法使用上面的解决方案。
我需要一种在Where子句中包含IF语句的解决方案,例如:
SELECT *
FROM events
WHERE IF(startTime = NULL, startDate >= '$date', startTime >= '$unix')
我只是猜测这个解决方案,但它是否正确呢?