MySQL での重複する日付範囲のチェック: 最適化されたソリューション
このシナリオでは、イベントを保存する「session」というテーブルがあります。開始日と終了日。新しいイベントを挿入するときは、既存のセッションとの競合を避けることが重要です。
一般的なアプローチには、日付比較を使用して重複を特定することが含まれます。
SELECT * FROM session WHERE "2010-01-05" BETWEEN start_date AND end_date OR "2010-01-25" BETWEEN start_date AND end_date OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date;
ただし、この方法は、次の場合には必ずしも効率的であるとは限りません。大規模なデータセットをチェックしています。最適化されたソリューションは、次の式を使用して実現できます。
WHERE new_start < existing_end AND new_end > existing_start;
この式は、新しいイベントの開始日と終了日 (new_start と new_end) を既存のイベントの開始日と終了日 (existing_start) と効果的に比較します。および既存の終了)。これらの条件が真の場合、重複が存在します。
このアプローチを説明するために、次の表を考えてみましょう。
id | start_date | end_date |
---|---|---|
1 | 2010-01-01 | 2010-01-10 |
2 | 2010-01-20 | 2010-01-30 |
2010 年 1 月 5 日から 2010 年 1 月までの新しいイベントとの重複を確認してみましょう。 2010-01-25:
ns | ne | es | ee | Overlap |
---|---|---|---|---|
2010-01-05 | 2010-01-25 | 2010-01-01 | 2010-01-10 | Yes |
2010-01-05 | 2010-01-25 | 2010-01-20 | 2010-01-30 | Yes |
ご覧のとおり、新しいイベントは既存の両方のイベントと重複していますセッション。このアプローチは、MySQL で重複する日付範囲をチェックする効率的かつ正確な方法を提供し、競合が効果的に検出および解決されることを保証します。
以上がMySQL で重複する日付範囲を効率的にチェックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。