我正在管理事件数据库。每个事件都有开始和结束时间戳记(INT, unix timestamp)。
INT, unix timestamp
目前,我可以通过一个SQL查询执行以下操作:
问题是当一个事件跨越几天时,我无法在它的开始和结束时间戳之间的日期列出它。
例如:
活动开始于2011/05/25和结束于2011/05/27,但我无法在页面2011/05/26上列出。
我实际的SQL查询是
SELECT * FROM `event` WHERE (`start` BETWEEN ? AND ?) OR (`end` BETWEEN ? AND ?) ORDER BY start ASC
根据给定的参数类型(整月或特定日期)自动计算两个绑定参数(unix时间戳)
是否有可能在两个端点之间的一天之间的一天中发生这些事件(跨越几天)?
如果可以澄清我的问题,请告诉我。
更新
例子:
event start: 1309125660 (2011-06-27 00:01:00) end end: 1314050340 (2011-08-22 23:59:59) select start: 1312408860 (2011-08-04 00:01:00) select end: 1312495199 (2011-08-04 23:59:59)
当我尝试列出发生在2011/08/4的事件时,此事件不会出现
如果我提出的问题正确,并且[:start, :end]是您感兴趣的日期范围,那么您正在寻找:
[:start, :end]
select * from event where -- event started earlier, ends later start <= :start and :start <= end or -- event starts during [:start, :end] :start <= start and start <= :end or -- event ends during [:start, :end] :start <= end and end <= :end;
如果您要查找特定内容:day,请使用:dayas:start和:day + 1 dayas :end。
:day
:start
:day + 1 day
:end