เทคนิคการเขียนคำสั่ง sql ป้องกันเวลาทับซ้อนในระบบจอง


สำหรับระบบการจองนั้น จำเป็นอย่างยิ่งที่จะต้องมีการตรวจสอบไม่ให้การจองมีการทับซ้อนกับเวลาที่มีการจองไว้แล้วในต่อไปนี้นี้คือคำสั่ง sql ตรวจสอบว่าการจองต้องไม่ทับซ้อนกัน



//กำหนดให้ เวลาที่ต้องการจอง อยู่เริ่มจากเวลาจริง $min นาที และเลิกก่อนเวลาจริง $min นาที
//เพราะผู้ใช้จะได้สามารถจองในเวลาถัดไปได้เลย โดยที่ไม่ทับกับการจองก่อนหน้า
$start_time=date('Y-m-d H:i:s', strtotime(' +'.$min.' minutes', strtotime($_POST["start_time"]) ));
$end_time=date('Y-m-d H:i:s', strtotime(' -'.$min.' minutes', strtotime($_POST["end_time"]) ));

//ตัวอย่างคำสั่ง sql สำหรับตรวจสอบการจอง
            $sql="SELECT * FROM reservation
             WHERE(
                   ( (start_time>='".$start_time."')AND(end_time<='".$end_time."') )OR
                   ( (start_time<='".$start_time."')AND(end_time>='".$end_time."') )OR
                   ( (start_time BETWEEN '".$start_time."' AND '".$end_time."') )OR
                   ( (end_time BETWEEN '".$start_time."' AND '".$end_time."') )
            )";

//เวลาที่จองใหม่ต้องไม่คล่อมเวลาที่จองเดิม
(start_time>='".$start_time."')AND(end_time<='".$end_time."')

//เวลาที่จองใหม่ต้องไม่อยู่ในเวลาที่จองเดิม
(start_time<='".$start_time."')AND(end_time>='".$end_time."')

 //เวลาที่จองใหม่ต้องไม่ทับซ้อนเวลาที่จองเดิม
( (start_time BETWEEN '".$start_time."' AND '".$end_time."') )OR
( (end_time BETWEEN '".$start_time."' AND '".$end_time."') )

ถ้ารันคำสั่งตามเงื่อนไขแล้วมีผลลัพธ์มากกว่าหนึ่งแถวแสดงว่าการจองมีการทับซ้อน