แนวทางเช็คห้องว่าง ด้วย php และ mysql กับช่วงเวลาต่อวัน

เขียนเมื่อ 9 ปีก่อน โดย Ninenik Narkdee
ช่วงเวลา ห้องว่าง

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ ช่วงเวลา ห้องว่าง

ดูแล้ว 16,223 ครั้ง


รูปแบบต่อไปนี้ใช้สำหรับกรณีการตรวจสอบข่วงเวลา ที่ว่างของวันหนึ่งๆ เท่านั้น
กรณีใช้ตรวจสอบช่วงเวลาข้ามวันต้องประยุกต์เพิ่มเติม
 
หลักการสู่เงื่อนไข คือ สมมติเรามีห้อง ที่ให้สำหรับจองเวลาเพื่อใช้งาน และเมื่อมีการจอง
ห้องดังกล่าวแล้ว เราทำการบันทึกข้อมูล คือ ช่วงเวลาเริ่มต้น และช่วงเวลาสิ้นสุด
 
*สามารถใช้สำหรับหลายห้องก็ได้ กรณีตัวอย่างสมมติแค่ห้องเดียว 
 
รูปแบบโครงสร้างฐานข้อมูลเก็บการจองห้อง อย่างง่าย

-- 
-- Table structure for table `tbl_room_reserve`
-- 

CREATE TABLE `tbl_room_reserve` (
  `reserve_id` int(11) NOT NULL auto_increment,
  `reserve_start` datetime NOT NULL,
  `reserve_end` datetime NOT NULL,
  PRIMARY KEY  (`reserve_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

-- 
-- Dumping data for table `tbl_room_reserve`
-- 

INSERT INTO `tbl_room_reserve` VALUES (1, '2015-04-01 08:15:00', '2015-04-01 10:15:00');
INSERT INTO `tbl_room_reserve` VALUES (2, '2015-04-01 14:02:04', '2015-04-01 15:02:13');
INSERT INTO `tbl_room_reserve` VALUES (3, '2015-03-31 14:59:29', '2015-04-01 16:59:42');



การจะตรวจสอบว่าวันนี้ ห้องว่างหรือไม่ เราต้องทำการส่งเวลาที่ต้องการตรวจสอบเข้าไป
ดูแนวทางการสมมติการส่งค่า และการใช้งาน
 
ตัวอย่างโค้ด คำอธิบายแสดงในโค้ด
 
<?php
header("Content-type:text/html; charset=UTF-8");            
header("Cache-Control: no-store, no-cache, must-revalidate");         
header("Cache-Control: post-check=0, pre-check=0", false);      
// เชื่อมต่อกับฐานข้อมูล      
$link=mysql_connect("localhost","root","test"); // เชื่อมต่อ Server        
mysql_select_db("test");  // ติดต่อฐานข้อมูล        
mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล    
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    
    <br>
    <br>
    <br>
    <div style="width:800px;margin:auto;">

<?php
// ตัวอย่างชุดข้อมูล
//    2015-04-01 08:15:00	2015-04-01 10:15:00
//    2015-04-01 14:02:04	2015-04-01 15:02:13

$chk_startDateTime="2015-04-01 15:02:00";  // ค่าวันที่ เวลาเริ่ม ที่ต้องการเช็ค
$chk_endDateTime="2015-04-01 17:14:00";     // ค่าวันที่ เวลาสิ้นสุด ที่ต้องการเช็ค
$nowday=substr($chk_startDateTime,0,10);  // ดึงค่าเก็บวันที่ปัจจุบันไว้ใช้งาน

// ตรวจสอบว่าวันนี้มีรายการจองทั้งหมดกี่รายการ 
$numInDay=@mysql_result(@mysql_query("
SELECT COUNT(reserve_id) FROM tbl_room_reserve 
WHERE reserve_start LIKE '".$nowday."%'
"),0,0);

// ชุดคำสั่ง sql ตรวจสอบ รายการจอง ที่ไม่ทับซ้อนกับเวลาที่ตรวจสอบ
$q="
SELECT * FROM tbl_room_reserve WHERE 1 
AND (
        (
            reserve_start>'".$chk_startDateTime."' 
            AND reserve_start>'".$chk_endDateTime."' 
            AND reserve_end>'".$chk_startDateTime."' 
        ) 
            OR  
        (
            reserve_end<'".$chk_startDateTime."' 
            AND reserve_end<'".$chk_endDateTime."'       
            AND reserve_start<'".$chk_endDateTime."'    
        )
    )   
";
$qr=mysql_query($q);
// จำนวนรายการจองที่ไม่ทับซ้อนกับเวลาที่ตรวจอบ
$numMatch=mysql_num_rows($qr);

// ถ้าจำนวนรายการจองที่ไม่ทับซ้อนกับเวลาที่ตรวจสอบ เท่ากับรายการจองทั้งหมด
// ซึ่งหมายถึง ช่วงเวลาที่ตรวจสอบ ว่าง
if($numMatch==$numInDay){
    echo "ว่าง";   
}else{
    echo "ไม่ว่าง เลือกช่วงเวลาใหม่";   
}


?>
        
    </div>
    
</body>
</html>
 
สามารถประยุกต์เพิ่มเติม ได้ตามต้องการ


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ








เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน เพื่ออ่านเนื้อหาบทความ

ยังไม่เป็นสมาชิก

สมาชิกล็อกอิน



( หรือ เข้าใช้งานผ่าน Social Login )




URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ