event_id、event_name、event_start_date、および event_end_date で構成される「イベント」テーブルがあります。
私が抱えている問題は、新しいイベントを挿入するときに、新しいイベントの指定された開始日と終了日の間に以前のイベントがないことを確認する必要があることです。
event_to_date と event_form_date の間に 2 つのイベントがあってはなりません。
PHP と MySql を使用しています。
競合するイベントの数を確認するには、SQL を使用する必要があります。
<?php
// do your mysql connection
// count collided events
$sql = 'SELECT COUNT(*) as count FROM events WHERE event_start_date <= "'.
mysql_real_escape_string($new_event_end_date).'" AND event_end_date >= "'.
mysql_real_escape_string($new_event_start_date).'"';
$result = mysql_query($sql);
if (($row = mysql_fetch_assoc($result)) != FALSE) {
if ($row['count'] == 0) {
// insert the event normally
} else {
trigger_error('Error: There are '.$row['count'].' event(s) within this period.');
}
} else {
trigger_error('Unknown server error: '.mysql_error());
}
?>
基本的に、オーバーラップを探しています。これは一種の疑似的なもので、candidate_X は着信データで、existing_Y はデータベースにあるものです。
解決策は、日付を保存するフィールドの種類によって異なります。
おそらくBETWEENなどを使用して、これを改善できることは間違いありません。
SELECT ID from events WHERE
(candidate_from < existing_to
AND
candidate_to > existing_to)
OR
(candidate_to > existing_from
AND
candidate_to < existing_to)
これにより結果が生成される場合は、データベースに重複するものがあることを意味するため、イベントの ID などを返すことができます。
これはところでテストされていません。