2

私はphpとmysqlでホテル予約システムのプロジェクトを行っています。以下の部屋のテーブルを作成しました。

room_no| roo_id | room_type
 D1     |  1     | Deluxe
 R1     |  2     | AC
 R2     |  3     | Non Ac
 C1     |  4     | Cottage

この表は、ホテルの全部屋を表す部屋に関するものです。

これはcustomer_bookingテーブルです。

customer_id | Cust_name | email | Address | room_type | room_no| cost|check_in | check_out
1 | satyawan |ss@gmail.com| xy | AC       |  R1    |5000 | 2012-12-26|2012-12-30
2 |satyawan  |   lahu@gmail.com|unr  |  Non A/C | R6 |            20002012-01-01|2012-12-07
3 |satyawan  |   lahu@gmail.com|unr  |  Non A/C | R8 |            2013-01-01  |2013-01-10
4 |satyawan  |   lahu@gmail.com|unr  |  Non A/C | R9 |            2013-01-10 |2013-01-16
5 |satyawan  |   lahu@gmail.com|unr  |  Non A/C | R6 |            2013-01-01 |2013-01-20

予約されていない部屋の並べ替えデータについて、この両方のテーブルの結合時にクエリを実行しました。クエリは以下のとおりです

SELECT *
FROM rooms 
LEFT JOIN customer_booking  
ON customer_booking.room_no = rooms.room_no
WHERE customer_booking.client_id IS NULL
OR (customer_booking.check_out >= 2013-01-01
AND customer_booking.check_in >= 2013-01-10)
OR (customer_booking.check_out <= 2013-01-01
AND customer_booking.check_out <= 2013-01-10)

ただし、予約されていない部屋のデータのみが必要です。部屋がすでに予約されている場合は、この部屋がこの日にすでに予約されていることを示す必要があります。

私はそれについて何も考えられません。

4

4 に答える 4

1

を探しているのかもしれませんNOT IN

SELECT * FROM rooms AS r WHERE r.room_no NOT IN (
   SELECT cb.room_no FROM customer_booking AS cb WHERE your_checkin_constraints); 
于 2012-12-27T11:59:37.967 に答える
0
    SELECT r.room,case when r.room_no is null then 'Available'
    else 'Not Available' end
    FROM rooms r
    LEFT JOIN customer_booking cb 
    ON cb.room_no = r.room_no
    AND cb.check_out <= cur_date()-1
于 2012-12-27T12:13:43.837 に答える
0

このように試してみると、予約されていない部屋が表示されます

SELECT * FROM room r WHERE 
 not exists (
   SELECT cb.room_no FROM customer_booking cb where cb.room_no=r.room_no);
于 2012-12-27T12:35:26.763 に答える
0

このクエリを使用してみてください。最後のフィールドroom_customer_idが 0 の場合、部屋は空いています。それ以外の場合は、この部屋を予約した customer_id が表示されます。

SELECT rooms.*,COALESCE(customer_booking.customer_id,0) room_customer_id
FROM rooms 
LEFT JOIN customer_booking  ON 
   (customer_booking.room_no = rooms.room_no)
   and 
   (
      ('2013-01-01' between customer_booking.check_in and customer_booking.check_out)
      or 
      ('2013-01-10' between customer_booking.check_in and customer_booking.check_out)
      or 
      (customer_booking.check_in between '2013-01-01' and '2013-01-10')
    )
于 2012-12-27T12:06:10.820 に答える