各ホテルが特定の日数の料金を持っている/持っているホテル管理システムを開発することを計画しています。レート値は別のテーブルに保存されますが、これは問題ありません。
表は以下の通り。
特定の日付範囲に既存のレートがあるかどうかを確認するために使用する SQL クエリ。
SELECT * FROM `hotel_rate`
WHERE
(from_date <= '2013-04-18' AND to_date <= '2013-04-22') OR
(from_date >= '2013-04-18' AND to_date >= '2013-04-22') OR
(from_date >= '2013-04-18' AND to_date <= '2013-04-22') OR
(from_date <= '2013-04-18' AND to_date >= '2013-04-22')
私がやろうとしているのは、「2013-04-18」から「2013-04-22」までの日付範囲の料金を追加することです。'2013-04-20' から '2013-04-23' までの日付範囲の料金が既に追加されています。そのため、レートを追加している管理者に、選択した特定の期間にレートがすでに適用されていることを通知したいと思います。
問題は、レートが重複している特定の行のみを取得したい場合に、データベースからすべての行をフェッチする SQL クエリです。私の例では、結果セットには id = 4 の行のみが含まれている必要があります。
レートを追加する前に、私の知る限りでは、以下の 4 つの条件を確認する必要があります。2 本の黒い線は、ホテルの既存の料金を示しています。黄色の線は、重複する可能性のあるシナリオを示しています。任意のセットで、1 番目の黄色の線は from_date です。2 番目の黄色の線は to_date です。
どうすればこれを修正できますか? 重複レート行のみを取得するにはどうすればよいですか?