目前,我正在制作一个学校社区网站,我遇到了一个问题,管理员发布了一个新事件,他/她想要检查事件开始日期和时间是否没有冲突以及结束日期和时间,然后再将其保存到数据库。我尝试了很多查询,但仍然无法获得确切的 sql。
我正在使用 MySQL Server 5 和 PHP 5.3。任何人都可以帮助我如何查询表,我的意思是正确的 sql 字符串。
这是表字段:
- event_id => int,
- event_type => enum('学校','部门'),
- event_title=> 文本,
- event_details=> 长文本,
- event_start=> 日期时间,
- event_end=> 日期时间,
- event_added_by=> int,
- event_modified_on=> 日期时间,
这是我现在拥有的:
SELECT *, time(event_start) as start_time, time(event_end) as end_time
FROM `tbl_events` WHERE ((date(event_start) between '2011-12-9' and
'2011-12-15') AND (time(event_start) between '00:00:00' and
'01:00:00')) OR ((date(event_end) between '2011-12-9' and
'2011-12-15') AND
最佳答案
您需要查找表明存在冲突的四件事:
- 现有事件在您的事件开始之前开始,并在您的事件结束之后结束(您的事件位于现有事件内)
- 现有事件在您的事件开始之前开始,并在您的事件开始之后结束(与新事件的开始部分重叠)
- 现有事件在您的事件结束之前开始,并在您的事件结束之后结束(与新事件的结束时间重叠)
- 现有事件在您的事件开始后开始,并在您的事件结束前结束(现有事件位于新事件内)
之前和之后,我的意思是同时或之前/之后(<= 和 >=)。
关于用于检查事件冲突的 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603741/