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

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 に答える
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 に答える