sql >> データベース >  >> RDS >> Mysql

2つの日付の間に利用可能な部屋を選択する

    予約を含むテーブルのみを表示しているため、ここで完全な答えを見つけるのは困難です。利用可能な部屋の範囲を知ることはできません。

    選択した期間の少なくとも一部で予約された部屋のroom_idを返すSQLは、次のようになります。

    SELECT `room_id` , COUNT(*)
    FROM `bookings`
    WHERE `dt` BETWEEN "[start date]" AND "[end date]"
    GROUP BY `room_id`;
    

    (予約ではなく)部屋のテーブルがある場合は、その期間中に予約されていない部屋のリストを次のように返すことができます。

    SELECT `id`
    FROM `rooms`
    WHERE `id` NOT IN (
      SELECT DISTINCT( `room_id` )
      FROM `bookings`
      WHERE `dt` BETWEEN "[start date]" AND "[end date]"
    );
    

    修正

    OPによるフィードバックに基づいて、仮定は次のようになります。

    • この表には、列dtの日付から始まる期間に利用可能な部屋の詳細が含まれています。 翌日終了(ホテルの部屋など)
    • クエリは、入力された期間のエンティティに利用可能なすべての部屋を返す必要があります(したがって、A日からB日まで利用可能な部屋のみが返されます。

    そのため、修正されたコードは次のとおりです。

    SELECT room_id
    FROM available_rooms
    WHERE dt BETWEEN "[start date]" AND DATE_SUB("[end date]",INTERVAL 1 DAY)
    GROUP BY room_id
    HAVING COUNT(*)=ABS(DATEDIFF("[start date]","[end date]"));
    


    1. MySQLの特定の列の更新後にトリガーを起動します

    2. SQLデータをあるテーブルから別のテーブルに移動する

    3. 各キーワードの上位「n」の結果

    4. 左アウターをLaravelと結合するにはどうすればよいですか?