1

テーブルリザーブ

  • reserve_id
  • roominv_id
  • チェックイン
  • チェックアウト
  • ステータス (予約済み、キャンセル済み、保留中)

テーブルルーム在庫

  • roominv_id
  • room_id
  • 部屋番号
  • room_status(利用可能、利用不可)

テーブルルーム

  • room_id
  • room_type

宿泊予約制を行っております。

部屋の空室状況に関するクエリは既にあります。

SELECT r.roominv_id,r.room_id 
FROM roominventory r
WHERE r.roominv_id
NOT IN 
(SELECT b.roominv_id
FROM reserve b
WHERE NOT (b.chckout < '$chckin'
OR
b.chckin > '$chckout'))

私の質問は、クエリのどこに条件を挿入するかです。特定の部屋タイプを選択できる場所は、部屋の空室状況によって異なります。

似ていることは知ってroom.room_type LIKE '%$roomtype%'いますが、クエリのどの部分に挿入するのかわかりません。

4

2 に答える 2

2

LEFT JOIN以下を使用してチェックする別のアプローチを次に示しNULLます。

SELECT 
  r.roominv_id, 
  r.room_id 
FROM roominventory AS r
    INNER JOIN room AS m ON m.room_id = r.room_id
    LEFT JOIN reserve res ON r.roominv_id = res.roominv_id AND
               NOT (b.chckout < '$chckin' OR b.chckin > '$chckout')
WHERE m.room_type LIKE '%$roomtype%' 
    AND res.roominv_id IS NULL

幸運を。

于 2013-02-02T08:13:07.477 に答える
1

次のようなJOINテーブルを作成できます。room

SELECT 
  r.roominv_id, 
  r.room_id 
FROM roominventory AS r
INNER JOIN room AS m ON m.room_id = r.room_id
WHERE m.room_type LIKE '%$roomtype%'
  AND r.roominv_id NOT IN (SELECT b.roominv_id
                           FROM reserve b
                           WHERE NOT (b.chckout < '$chckin'
                                      OR 
                                      b.chckin > '$chckout'));
于 2013-02-02T08:07:16.587 に答える