ลองแก้ <option value="00.00" <= เป็นนาทีดีไหมครับ ทำแบบนี้จะรองรับการกรอกเป็นตัวเลขเลย
แล้วก็ เช่น
1 วันมี 24 ช.ม.
0.00 = 0
1.00 = 60
2.00 = 120
.
.
.
20.00 = 1200
.
.
24.00 = 1440
เวลามีคนมาจองก็เก็บค่าเวลาเริ่มต้นเอาไว้
เช่น จองตั้งแต่เวลา
10.00-11.00
สมมติว่าห้องกำลังวาง
จับมันแปลงร่างเป็นนาทีเลยครับ
A = 10.00 = 600
B = 11.00 = 660-1 = 659 ### ลบ 1 เพื่อแก้ปัญหาคนที่ select เวลา 11.00 แล้วไม่เข้าเงื่อนไข ###
จะได้ B - (A+1) = 60 ### +1 เพื่อให้คิดเป็นนาทีที่ประชุมได้ถูกต้อง เผื่อเอาค่านี้ไปทำอย่างอื่น เช่น ลูกค้าคนนี้ เช่ามาทั้งหมดกี่นาที เป็นเงินกี่บาท ครบกี่นาทีกี่ชั่วโมง ได้ประชุมฟรี ฯลฯ###
table ข้อมูลหลักๆจะเก็บประมาณนี้
| rd_id | rd_begin | rd_time | rd_end |
1 600 59 659
2 900 59 959
ตานี้อีกคนเลือกห้องบ้าง สมมติมีแค่ห้องเดียวอ่ะ
10.30 - 12.00
คราวนี้ต้องมาเช็คละ
10.30 A = 630
12.00 B = 720-1 = 719
Querystring = "SELECT * FROM table WHERE (rd_begin BETWEEN 630 AND 719) OR (rd_end BETWEEN 630 AND 719)"
rd_begin BETWEEN 630 AND 719 "rd_begin มีค่าระหว่าง 630 - 719 rd_begin เป็น 600 กับ 900 เป็นเท็จ"
หรือ
rd_end BETWEEN 630 AND 719 "rd_end มีค่าระหว่าง 630 -719 rd_begin เป็น 659 มี 1 อัน ส่วนอีกอัน 959 ไม่มี" เป็นจริง 1 อัน
เท็จ หรือ จริง = จริง
ข้อมูลจะออกมา ได้ 1 แถว
| rd_id | rd_begin | rd_time | rd_end |
1 600 59 659
ดังนั้น หาก Query นี้มีข้อมูลออกมา หรือ num rows > 0 คือห้องประชุมไม่ว่าง แล้วเอาดึงค่ามาหากได้หลายค่าก็นับแถวแล้ว fetch
หาก row = 0 ห้องประชุมว่างก็จับ insert เลยครับ
สมมติ เขาประชุมนาน 10.30 - 15.30 เลย
A = 630
B = 930-1 = 929
Querystring = "SELECT * FROM table WHERE (rd_begin BETWEEN 630 AND 929) OR (rd_end BETWEEN 630 AND 929)"
rd_begin BETWEEN 630 AND 929 ###"rd_begin มีค่าระหว่าง 630 - 929 rd_begin เป็น 600 เทส กับ 900 เป็นจริง" เป็นจริง แถวของ id ที่ 2
หรือ
rd_end BETWEEN 630 AND 929 ###"rd_end มีค่าระหว่าง 630 -929 rd_begin เป็น 659 มี 1 อัน ส่วนอีกอัน 959 ไม่มี" เป็นจริง 1 อันในแถวของ id ที่ 1 ดังนั้น ข้อมูลก็จะออกมา ทั้ง แถวของ id ที่ 1 และ 2
| rd_id | rd_begin | rd_time | rd_end |
1 600 59 659
2 900 59 959
ก็จะสามารถบอกได้ว่า เวลามันทาบช่วงไหนบ้าง
หวังว่าคงช่วยได้ไม่มากก็น้อยนะครับ ส่วนฟังชันแปลงนาทีเป็น ชม. ลองหาเอานะครับไม่ยาก ไม่แน่ใจเหมือนกันนะ ไม่ได้ลองกับ data จริง คิดในหัวเอา ยังไงลองไปประยุกต์ดูนะครับ
ถ้าจะใส่เลขห้องเพิ่มก็
Querystring = "SELECT * FROM table WHERE (
(rd_begin BETWEEN 630 AND 929) OR (rd_end BETWEEN 630 AND 929)
) AND room = 1"