我正在尝试将日历的所有事件存储在用户给定的特定范围内的数据库表中。它一直有效,直到事件跨越多天。此时结束日期将不在时间范围内,因此查询将丢弃它。我的问题是如何获取所有落在给定范围内的事件,无论它们是在范围之前开始并在范围内结束,还是在范围内开始并在范围内结束。我必须从结果中排除在范围之后开始或在范围之前结束的所有事件
CREATE TABLE IF NOT EXISTS `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;
当前查询
SELECT t0_.name AS name0, t0_.start AS start3, t0_.end AS end4
FROM events t0_
WHERE t0_.start > start
AND t0_.end < end
示例数据:
name start end
-------------------- -------------------- --------------------
test event 2012-02-17 09:00:00 2012-02-17 09:50:00
test event2 2012-02-17 09:00:00 2012-02-19 09:00:00
test event3 2012-02-12 09:00:00 2012-02-17 09:00:00
test event4 2012-02-12 09:00:00 2012-02-13 09:00:00
预期结果数据:
name start end
-------------------- -------------------- --------------------
test event 2012-02-17 09:00:00 2012-02-17 09:50:00
test event2 2012-02-17 09:00:00 2012-02-19 09:00:00
test event3 2012-02-12 09:00:00 2012-02-17 09:00:00
有范围:
2012-02-17 00:00:00 - 2012-02-17 23:59:59
如您所见,我选取了给定范围内的事件,加上在该范围内开始并在该范围之后结束的事件以及在该范围之前开始但在该范围内结束的事件。