わかりました... それで、CodeIgniter を使用して構築されたカスタム PHP アプリケーションにカレンダーがあり、MySQL データベースからエントリを取得します。エントリ データを含むテーブルには、エントリの日付 ( start_date )、時間 ( start_time )、期間 ( duration )を管理する 3 つのフィールドがあります。ここで、エンドユーザーがエントリを新しい日付および/または時間に移動すると、システムはスケジュールの競合についてこれら 3 つのフィールドをチェックする必要があります。
以下は、クエリで使用される変数の一部です。
$request_entry_id // the id of the entry being moved
$request_start_date // the requested new date
$request_start_time // the requested new time
$request_duration // the duration of the entry being moved (will remain the same)
$end_time = ($request_start_time + $request_duration); // the new end time of the entry being moved
スケジュールの競合を確認するために使用されるクエリは次のとおりです。
SELECT t.id
FROM TABLE t
WHERE t.start_date = '$request_start_date'
AND (j.start_time BETWEEN '$request_start_time' AND '$end_time'))
AND t.id <> $request_entry_id
上記のクエリは、リクエストと同じ日時に開始するエントリをチェックします。ただし、最も効率的な方法で、新しいリクエストが既存のエントリの期間内に収まらないことを確認することも必要です (トリックがあります)。助言がありますか?前もって感謝します!