0

我有一个关于 PHP 和 MySQL 的简单日历,它以简单的格式存储事件:

id int
name varchar    
start datetime 
end datetime

我需要做的并且找不到可靠的方法是“阻止”某个时间段,以便在该时间窗口内不能有任何其他事件。

我试图找到的基本上是mysql查询来检查新选择的时间范围是否被占用:

如果我这样走:

SELECT * FROM events WHERE new_event_start => start AND  new_event_end =< end;

找不到在之前开始new_event_start和之后结束的事件new_event_end

有任何想法吗?

4

3 回答 3

1

这是一个逻辑问题,而不是语言或技术问题。

您需要测试几种情况:

End of new event is between the beginning and end of blocked period
OR
Beginning of new event is between the beginning and end of blocked period
OR
Beginning of new event is before the beginning of the blocked period and the end is after the end of the blocked period

这将捕获与阻塞时间段重叠的所有事件。

于 2012-06-13T15:28:41.327 回答
0

尝试这个

select count(*) from events 
where (start between new_event_start and new_event_end) 
OR (end between new_event_start and new_event_end);
于 2012-06-13T15:25:23.347 回答
0

在 WHERE 中使用 OR。

SELECT * FROM events WHERE (new_event_start => start AND new_event_end =< end) OR (new_event_start <= start AND new_event_end >= end) OR ...

于 2012-06-13T15:21:46.090 回答