เขียนคำสั่ง SQL เช็ครายการจองซ้ำ ช่วงวันและเวลาซ้ำ ระบบจอง SQL & PHP
คำอธิบายโค้ดตัวอย่าง คำสั่ง SQL นี้
- 1. จะตรวจสอบ ห้องก่อน และวันเวลาเริ่ม และวันเวลาสิ้นสุด ว่ามีรายการจองซ้ำ ถ้ามีรายการจองก่อนแล้วจะไม่สามารถ จองห้องที่ทับซ้อนได้
- 2. ครอบคลุมช่วงวันเวลาเริ่มต้นถึงวันเวลาสิ้นสุด
- 3. ครอบคลุมช่วงวันเวลา ทับซ้อนกับวันเวลาเริ่มต้นถึงวันเวลาสิ้นสุด
- 4. ครอบคลุมช่วงวันเวลาที่คร่อม ระว่างวันเวลาเริ่มต้นถึงวันเวลาสิ้นสุด
ตัวอย่างนี้ นำมาจากระบบจอง ห้องประชุม / จองโต๊ะ การจองนอกจากจะตรวจสอบค่าซ้ำแล้วยังตรวจสอบ ค่า ว่าง/อนุมัติ/ไม่อนุมัติด้วย มีตัวอย่างระบบนะครับ ลองหาดูที่เมนู "ผลงาน"
ตัวอย่างนี้สามารถนำไปปรับแก้ตามโปรเจคของผู้อ่านได้เลยนะครับ ผู้อ่านน่าจะมีความรู้เกี่ยว SQL อยู่แล้ว ดังนั้นผมจะแค่อธิบายคราวๆนะครับ
ก่อนเริ่มสิ่งที่ต้องรู้
tb_room ชื่อฐานข้อมูล
name_room ชื่อฟิลด์ เก็บข้อมูลห้อง
$name_room ตัวแปรไว้เก็บข้อมูลห้องที่ส่งมา
action IS NULL คือค่าฟิลด์ action ต้องมีค่าเท่ากับค่าว่างถึงจะเข้าเงื่อนไข ตรงนี้สมารถไปปรับแต่งหรือจะตัดออกก็ตามแต่งานของผู้อ่านครับ
startime ชื่อฟิลด์ เก็บข้อมูลเวลาเริ่มต้น
endtime ชื่อฟิลด์ เก็บข้อมูลเวลาสิ้นสุด
$start_date ตัวแปรไว้เก็บข้อมูลเวลาเริ่มต้นที่ส่งมา
$end_date ตัวแปรไว้เก็บข้อมูลเวลาสิ้นสุดที่ส่งมา
โค้ดตัวอย่าง
GitHub<?php
$sql = "SELECT * FROM tb_room WHERE name_room = '" . $name_room . "' AND action IS NULL
AND ((startime BETWEEN '" . $start_date . "' AND '" . $end_date . "')
OR
(endtime BETWEEN '" . $start_date . "' AND '" . $end_date . "')
OR
('" . $start_date . "' BETWEEN startime AND endtime)
OR
('" . $end_date . "' BETWEEN startime AND endtime ))";
$result = mysqli_query($conn, $sql);
if ($row = mysqli_fetch_array($result)) {
echo 'รายการจองซ้ำ กรุณาเช็คว่า ห้อง/โต๊ะ หรือช่วงวันเวลาซ้ำ';
}
?>