นอกจากระบบจองห้องประชุมแล้ว น่าจะรวมถึงระบบจอง อื่นๆ ที่มีเรื่องวันที่ และเวลาเข้ามาเกี่ยวข้องด้วย ในรูปจะเป็นการค้นหาช่วงเวลาที่ทับซ้อนกัน
สำหรับคำสั่งที่ใช้ตรวจสอบเวลาที่จองห้อง จะเป็นดังนี้
<?php $id = $_POST['room_id']; $bkDate = $_POST['booking_date']; $startTime = $_POST['start_time']; $endTime = $_POST['end_time']; //ค้นหาว่ามีการจอง หรือยัง $sql = "SELECT * FROM tb_booking WHERE bk_room_id = '".$id."' AND bk_date = '".$bkDate."' AND ( (bk_start_time BETWEEN '".$startTime."' AND '".$endTime."') OR (bk_end_time BETWEEN '".$startTime."' AND '".$endTime."') )"; $qry = mysql_query($sql) or die(mysql_error()); if($row = mysql_fetch_array($qry)) { echo "ห้องนี้มีผู้ใช้งาน ช่วงเวลา ". $row['bk_start_time'] ." - ". $row['bk_end_time'] ." กรุณาตรวจสอบอีกครั้ง!"; } ?>
คำสั่งด้านบนนี้ จะครบคลุมแค่การเลือกช่วงเวลาคร่อม เวลาเริ่ม หรือ คร่อมเวลา สิ้นสุด การใช้ห้องเท่านั้น
หากมีการเลือกช่วงเวลาที่อยู่ ระหว่าง เวลาจอง เริ่มต้น ถึงเวลาจองสิ้นสุด จะทำให้ไม่เข้าเงื่อนไขว่ามีคนจอง เช่นเลือกช่วง 12:50 - 14.30 ทั้งที่ช่วงเวลา 18:15 - 16:15 มีคนใช้ห้องอยู่
ดังนั้นเราจะต้องเพิ่มเงื่อนไขเข้าไปด้วยว่า เลือกช่วงเวลาระหว่างใช้ห้องไม่ได้
<?php $sql = "SELECT * FROM tb_booking WHERE bk_room_id = '".$id."' AND bk_date = '".$bkDate."' AND ( (bk_start_time BETWEEN '".$startTime."' AND '".$endTime."') OR (bk_end_time BETWEEN '".$startTime."' AND '".$endTime."') OR ('".$startTime."' BETWEEN bk_start_time AND bk_end_time) OR ('".$endTime."' BETWEEN bk_start_time AND bk_end_time ) )"; ?>?>
แต่เมื่อพิจารณาคำสั่ง SQL ดูแล้วพบว่า อีกสองเงื่อนไขที่เพิ่มมาใหม่นั้นครบคลุม ทั้ง 3 กรณีแล้ว สามารถตัดเงื่อนไขบางเงื่อนไขออกไปได้ จะได้เป็น
@2013-08-09 แก้ไขโค๊ดที่ถูกตัดทอนในตอนท้าย นำไปใช้จริงแล้วจะมีหลุดกรณีเลือกช่วงเวลาคร่อมกับช่วงเวลาที่จองไปแล้ว ให้ใช้โค๊ดส่วนที่ยังไม่ได้ตัดทอนแทนนะครับ
ลองนำไปปรับใช้กันดูนะครับ
บทความแนะนำ
ส่วนแสดงผล แบบระบายสีตามช่วงเวลา
อ่านบทความเกี่ยวกับ SQL สำหรับระบบจองห้องพักได้ที่
ตัวอย่าง SQL สำหรับเช็คห้องว่าง สำหรับระบบจองห้องพัก
http://phpcodemania.blogspot.com/2018/07/php-sql-room-booking-available.html
ปล. จากคอมเมนต์ของคุณ @Komkit ทดสอบแล้วทำงานได้เช่นกันครับ เพียงแค่เปลี่ยนจาก OR เป็น AND
select * From ReserveRoomWhere (RoomID =@RoomID)and (BeginDate <=@EndDate)and (EndDate >=@BeginDate)
"PHP ไม่ได้สร้างสุดยอดโปรแกรมแต่ PHP ช่วยให้งานคุณง่ายขึ้นต่างหาก"
PHP CI MANIA - PHP Code Generatorโปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม
สนใจสั่งซื้อเพียง 3,990 บาท
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ความคิดเห็น
แสดงความคิดเห็น