แบบนี้ต้องใช้ between เพื่อหาว่า มีจำนวน การจองเข้ามากี่ห้องในช่วงวันที่ๆต้องการค้นหา และแยกประเภทห้อง จากนั้นนำจำนวนห้องที่ได้ มา ลบกับจำนวนห้องทั้งหมด ก็จะแสดงออกมาเป็นตัวเลขห้องที่ว่าง
เช่น ค้นหาระหว่างวันที่ 2011-11-19 ถึง 2011-11-20
พบข้อมูลดังนี้
2011-11-19 to 2011-11-20 type 1
2011-11-19 to 2011-11-20 type 2
2011-11-19 to 2011-11-20 type 1
2011-11-19 to 2011-11-20 type 1
2011-11-19 to 2011-11-20 type 2
สมมุติให้ type คือประเภทห้อง
ก็จะได้เป็น
จองห้องระหว่าง 2011-11-19 to 2011-11-20 มีห้องที่จองเป็นประเภทที่ 1 จำนวน 3 ห้อง
จองห้องระหว่าง 2011-11-19 to 2011-11-20 มีห้องที่จองเป็นประเภทที่ 1 จำนวน 3 ห้อง
ข้อมูลทั้งสามวันนี้ จะต้องไม่ซ้ำกัน เราสามารถใช้ group by ได้
เช่นหาว่า มีกี่ booking ในวันนั้น group by book_id where use_day='xxx';
เราหาว่า ห้องชนิดนั้น ว่างหรือป่าว อันดับแรก เราต้องรู้ก่อนว่าห้องชนิดนั้น roomtype_id อะไร max เท่าไรถ้าได้แล้ว
ก็เอามาหาโดย select count(book_id) as count1 from tbl where roomtype_id=x and use_day in('day1', 'day2', 'dayx');
if ($count1 < $max)
SELECT *,count(rtid) as num_room FROM room_order WHERE (chk_in BETWEEN ' 2011-11-19' and '2011-11-20') OR (chk_out BETWEEN ' 2011-11-19' and '2011-11-20') group by rtid
SELECT *,count(rtid) as room_now FROM room_order WHERE ('2011-11-20' BETWEEN chk_in and chk_out) OR ('2011-11-21' BETWEEN chk_in and chk_out) group by rtid asc