Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > รบกวนปรึกษาระบบจองห้องพักหน่อยครับ พอดีมีปัญหานิดหน่อยครับ อยากจะได้คำแนะนำดีๆจากพี่ๆที่มีประสบการณ์ครับ



 

รบกวนปรึกษาระบบจองห้องพักหน่อยครับ พอดีมีปัญหานิดหน่อยครับ อยากจะได้คำแนะนำดีๆจากพี่ๆที่มีประสบการณ์ครับ

 



Topic : 069289



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



อยากขอความช่วยเหลือเรื่องระบบจองห้องพักหน่อยครับ

คือผมสงสัยเรื่องของ

Code (PHP)
<?php
	date_default_timezone_set('UTC');
 
	// Start date
	$startdate = '2011-08-01';
	$enddate = '2011-08-31';
 
	while (strtotime($startdate) <= strtotime($enddate)) {
		echo "$startdate<br>";
		$strSQL = "SELECT * FROM table room_order WHERE ('$startdate' BETWEEN chk_in and chk_out) ";

		$startdate = date ("Y-m-d", strtotime("+1 day", strtotime($startdate)));
	}
?>


คือ สงสัยว่า ถ้าเกิดเรากำหนด

startdate = 2011-11-19
enddate = 2011-11-21

ซึ่งข้อมูลการจองห้องพักมีห้องที่จองไว้แล้วดังนี้

2011-11-18 to 2011-11-19
2011-11-19 to 2011-11-20
2011-11-19 to 2011-11-21
2011-11-20 to 2011-11-22

ประมาณนี้

แล้วเราจะทราบได้ไงว่า ค่าที่ query นั้น สามารถที่จะจองห้องพักได้ โดยที่ไม่ซ้ำกันคนที่เคยจองไปแล้ว(คือช่วงเวลาระหว่างที่จอง ในระหว่างวันที่ 2011-11-19 ถึง 2011-11-21 ว่าสามารถจองได้กี่ห้อง อะไรประมาณนี้ครับ)







ในส่วนของฐานข้อมูลที่ผมเก็บแยกดังนี้

อันนี้คือตารางที่ใช้ add ข้อมูลเมื่อมีการจองห้องพักนะครับ PHP

room_order


อันนี้คือตารางที่เก็บข้อมูลและรายละเอียดห้องพัก
room_type

ในส่วนของฟิลล์ room_now

ต้องการนำค่าที่เช็คได้ว่า ห้องประเภทนี้ ว่างกี่ห้อง และนำค่านั้นมาอัพเดทครับ

รบกวนขอคำแนะนำด้วยนะครับ

เพราะผมหัดเขียนระบบจองห้องพักครั้งแรก คิดว่ายังออกแบบตัว DB ไม่เก่งเท่าไหร่



หรือท่านใดที่จะให้คำชี้แนะผมก็จะน้อมรับครับ

แต่ขอช่วยอธิบายละเอียดนิดนึงนะครับ







-----------------------------------------------------------------------------

แบบนี้ต้องใช้ between เพื่อหาว่า มีจำนวน การจองเข้ามากี่ห้องในช่วงวันที่ๆต้องการค้นหา และแยกประเภทห้อง จากนั้นนำจำนวนห้องที่ได้ มา ลบกับจำนวนห้องทั้งหมด ก็จะแสดงออกมาเป็นตัวเลขห้องที่ว่าง

เช่น ค้นหาระหว่างวันที่ 2011-11-19 ถึง 2011-11-20

พบข้อมูลดังนี้

2011-11-19 to 2011-11-20 type 1
2011-11-19 to 2011-11-20 type 2
2011-11-19 to 2011-11-20 type 1
2011-11-19 to 2011-11-20 type 1
2011-11-19 to 2011-11-20 type 2

สมมุติให้ type คือประเภทห้อง

ก็จะได้เป็น
จองห้องระหว่าง 2011-11-19 to 2011-11-20 มีห้องที่จองเป็นประเภทที่ 1 จำนวน 3 ห้อง
จองห้องระหว่าง 2011-11-19 to 2011-11-20 มีห้องที่จองเป็นประเภทที่ 1 จำนวน 3 ห้อง



จากนั้นตอนแสดงผลที่โ๙ว์ว่ามีจำนวนห้องว่ากี่ห้อง ก็เอาค่าห้องพักทั้งหมด ของแต่ละประเภท มาโชว์ในหน้าการจองห้องพักที่ให้เลือกประเภทห้อง

และแสดงจำนวนห้องว่า สมมุติมี 15 ห้อง ก็ 15-3 = 12 ห้อง


และ ถ้าห้องพัก เหลือ 0 ก็สั่งให้ javascript ไป Disable ปุ่ม booking สำหรับประเภทห้องนั้น





ผมเข้าใจถูกต้องหรือเปล่าครับ



Tag : PHP, MySQL









ประวัติการแก้ไข
2011-11-19 08:32:37
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-11-19 00:02:30 By : asustak View : 3151 Reply : 10
 

 

No. 1



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

หลักการของผมคือ จะทำรูปแบบคล้ายๆกับเว็บนี้ครับ

http://www.apphp.com/php-hotel-site/examples/sample2/index.php






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-19 00:05:29 By : asustak
 


 

No. 2



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

คับ ผมคิดว่า (น่าจะตอบถูกประเด็น ถ้าเดาไม่ผิด คือการจองของคุณจองตามชนิดห้อง ไม่สามารถระบุห้องเป็นชื่อห้องได้ แล้ว ทางเราจัดหาห้องตามชนิดนั้นให้เอง)

ในตารางชนิดห้อง ต้องระบุ จำนวนที่จำกัดไว้
ในตารางจอง ต้องมีข้อมูลวัน จอง ของทุกวัน คือถ้าอยู่หลายวัน ก็จะมี reccordของแต่ละวัน

ผมคิดว่า การออกแบบให้ใช้งานได้ง่าย และมีข้อมูลครบเป็นสิ่งจำเป็น ผมไม่แน่ใจว่าวิธีผมจะถูกและดีพอหรือป่าว(มันขึ้นอยู่กับการออกแบบ gui ด้วย) เช่น
ตารางจอง มี primary 3 ตัว
book_id
roomtype_id
use_day

ข้อมูลทั้งสามวันนี้ จะต้องไม่ซ้ำกัน เราสามารถใช้ group by ได้
เช่นหาว่า มีกี่ booking ในวันนั้น group by book_id where use_day='xxx';
เราหาว่า ห้องชนิดนั้น ว่างหรือป่าว อันดับแรก เราต้องรู้ก่อนว่าห้องชนิดนั้น roomtype_id อะไร max เท่าไรถ้าได้แล้ว
ก็เอามาหาโดย select count(book_id) as count1 from tbl where roomtype_id=x and use_day in('day1', 'day2', 'dayx');
if ($count1 < $max)

คุณสามารใช้ select ซ้อนกัน เพื่อ นับทั้งหมดทุกชนิดห้องในคราวเดียวได้

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

แค่เป็นแนวทางนะคับ
ผมเคยทำนานมาแล้วตอนนั้นออกแบบ db ใช้เวลานานมากและมันเยี่ยมมาก แต่ผมลืมไปแล้ว TT ทั้งเว็บเกือบ 20 ตาราง สมุดที่ร่างไว้อยู่ไหนซักที่ ออกแบบฐานข้อมูลให้ดีที่สุดก่อนโดยคิดถึงเว็บที่จะทำ จะทำให้เรามีปัญหาน้อยเวลาพัฒนา

http://www.pjgunner.com
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-19 09:46:44 By : pjgunner.com
 

 

No. 3



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

สมมุติผมให้ค้นหาห้องพักวันที่

2011-11-18 ถึง 2011-11-20

เขียน sql ให้ select ดังนี้
Code (PHP)
SELECT *,count(rtid) as num_room FROM room_order  WHERE (chk_in BETWEEN ' 2011-11-19' and '2011-11-20') OR (chk_out BETWEEN ' 2011-11-19' and '2011-11-20')  group by rtid


ถูกต้องหรือไม่ครับ


เราก็จะได้ผลลัพธ์คือ

ในช่วงวันที่ 2011-11-19 ถึง 2011-11-20 มีการจองมาทั้งหมดกี่ห้อง



ผมเข้าใจถูกต้องไหมครับ


ตัวอย่าง code ที่ผมจะเขียนจะคล้ายๆกับระบบของ

http://www.apphp.com/php-hotel-site/examples/sample2/index.php ตัวนี้ครับ


ประวัติการแก้ไข
2011-11-19 22:43:50
2011-11-19 22:51:11
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-19 22:42:33 By : asustak
 


 

No. 4



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ค้นจาก check in กะ check out ? คุณลองคิดดูสิ
ถ้าผม เช็ึคอิน วันที่ 1 เช็ึคเอาท์ วันที่ 31

คุณค้น วันที่ 5 - 8 มันจะเจอไหม

แต่ไม่ใช่ว่าจะใช้สองตัวนี้ไม่ได้ ต้ิงคิดเผื่อปัญหาด้านบนไว้ด้วย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-20 08:41:37 By : pjgunner.com
 


 

No. 5



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 4 เขียนโดย : pjgunner.com เมื่อวันที่ 2011-11-20 08:41:37
รายละเอียดของการตอบ ::
ค้นจาก check in กะ check out ? คุณลองคิดดูสิ
ถ้าผม เช็ึคอิน วันที่ 1 เช็ึคเอาท์ วันที่ 31

คุณค้น วันที่ 5 - 8 มันจะเจอไหม

แต่ไม่ใช่ว่าจะใช้สองตัวนี้ไม่ได้ ต้ิงคิดเผื่อปัญหาด้านบนไว้ด้วย



ถ้ามีปัญหาลักษณะนี้พอมีทางแก้ไขไหมครับ


หรือต้องสั่งให้ Loop เช็คอีกทีครับ

เหมือนกระทู้

https://www.thaicreate.com/php/forum/064235.html



ผมลองเปลี่ยน query ใหม่ดังนี้ครับ

Code (PHP)
SELECT *,count(rtid) as room_now FROM room_order  WHERE ('2011-11-20' BETWEEN chk_in and chk_out) OR ('2011-11-21' BETWEEN chk_in and chk_out)  group by rtid asc




2011-11-17 23:13:18 2011-11-18 2011-11-22 room_type 1
2011-11-17 23:15:15 2011-11-18 2011-11-20 room_type 1
2011-11-19 22:49:54 2011-11-20 2011-11-21 room_type 2
2011-11-19 22:51:27 2011-11-20 2011-11-21 room_type 2
2011-11-20 18:37:00 2011-11-21 2011-11-30 room_type 1


ผลลัพธ์ ที่ query ได้ดังนี้

ในช่วงเวลา 2011-11-18 2011-11-22 type 1 มี 3 ห้อง ที่ถูกจอง
ในช่วงเวลา 2011-11-20 2011-11-21 type 2 มี 2 ห้อง ที่ถูกจอง

ซึ่งผมจะนำค่า ห้องที่ถูกต้อง ไปอัพเดทจำนวนห้องที่ว่าง ตอน search

เช่น

ห้อง A ในช่วงวันที่ค้นหา ว่าง 5 ห้อง ทำนองนี้ครับ

รบกวนขอคำแนะนำด้วยครับ


อย่างปัญหาที่คุณ เอี่ยวกล่าวมา


ผมลองทดสอบ

ให้จองห้องพัก วันที่ 2011-11-21 to 2011-11-31

และลองกำหนดให้ค้นหา เช็คอิน ระหว่างวันที่ 2011-11-25 to 2011-11-26

ซึ่ง ใน DB ไม่มีข้อมูลการจองห้องระหว่าง 2011-11-25 to 2011-11-26 ดังกล่าว

แต่เมื่อ query แล้ว แสดงให้เห็นว่ามี record 2011-11-21 to 2011-11-31 โชว์อยู่ แสดงว่า query นี้สามารถแก้ไขปัญหาที่คุณเอี่ยวแจ้งมา


ถูกต้องหรือไม่ครับ

ถ้าหากว่ายังมีปัญหาอยู่ รบกวนขอคำแนะนำเพิ่มเติมด้วยนะครับ

ผมจะได้นำไปปรับปรุงให้มีความสเถียรมากยิ่งขึ้น


ประวัติการแก้ไข
2011-11-20 21:43:19
2011-11-20 21:59:51
2011-11-20 22:05:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-20 18:36:47 By : asustak
 


 

No. 6



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอนนี้ผมติดปัญหาดังนี้ครับ

Code (PHP)
$qryroom = mysql_query("SELECT *,count(rtid) as room_now FROM room_order  WHERE ('$chk_in' BETWEEN chk_in and chk_out) OR ('$chk_ou' BETWEEN chk_in and chk_out)  group by rtid asc");




<? 

	while($arr=mysql_fetch_array($qry)) { ?>                 
    <form id="frm_order" name="frm_order" method="post" action=""> 
    <table width="650" border="0" cellspacing="0" cellpadding="0">
                   
                      <tr>
                        <td><?=$arr['name']?>&nbsp;(<?=$arr['total_room']?>)</td>
                        <td width="250" rowspan="3" align="center"><img src="images/<?=$arr['image']?>" width="200" height="157"></td>
                      </tr>
                      <tr>
                        <td height="150" valign="top"><div style="margin-top:15px"><?=$arr['detail']?></div></td>
                        </tr>
                      <tr>
                        <td></td>
                        </tr>
                      <tr>
                        <td> 
		<? // while($arr2=mysql_fetch_array($qryroom)){?>                        
        ว่าง (
		<? 
		$arr2=mysql_fetch_array($qryroom); 
		if($arr2['room_now']!='0' && $arr2['room_now']!='')
		{
		 	$room_ready = $arr['total_room']-$arr2['room_now'];
			echo $arr['total_room']."<br>".$arr2['room_now'];
		}else if($arr2['room_now']==''){
			echo $arr['total_room'];
		}else{ 
			echo $arr['room_now']."ห้องเต็ม" ;
			  }
		?>
        )  ห้อง
                                <br>
        Max Adults: 1, Max Children: 0 <br>
            Rate per night: $91.00 <br>
            Rooms: 
        <? // } ?>    
    <select name="select" id="select">
<? for($i=1;$i<=10;$i++){ ?>    
      <option><?=$i?> (<? $price = $arr['total_price'] * $i; echo "฿ ".number_format($price) ?>)</option>
<? } ?>      
    </select>
    
    </td>
                        <td align="center">
                        <? if($_POST['check_room']!=''){ ?>
                        <input type="submit" name="Book" id="Book" value="Book Now"><?=$arr['rid']?>
                        <? } ?>
                        <input type="hidden" name="room_name" id="room_name" value="<?=$arr['rid']?>">
                        <input type="hidden" name="chk_in" id="chk_in" value="<?=$chk_in?>">
                        <input type="hidden" name="chk_out" id="chk_out" value="<?=$chk_out?>">
                        <input type="hidden" name="D_total" id="D_total" value="<?=DateDiff($chk_in,$chk_out);?>">
                          <a href="<?=_MYPAGE_?>?booking=true">ทดสอบ</a></td>
                      </tr>
                    </table>
                    <br>
    <div style="border-bottom-style:dotted; border-bottom-color:#CCCCCC; border-bottom-width:1px; margin-left:10px; margin-right:10px; height:20px"></div><br>
                             
        </form>
    <? } // ปิด while 
	 ?> 




ปัญหาคือว่า

สมมุติ หน้าจอรายชื่อห้อง

มี

A

B

C

D

ห้อง A ถูกจอง 2 ห้อง

ห้อง B ถูกจอง 1 ห้อง

ห้อง C ยังไม่ถูกจอง

ห้อง D ถูกจอง 2 ห้อง


แต่จากตัว code จะแสดงผลเป็น

A ถูกจอง 2 ห้อง

B ถูกจอง 1 ห้อง

C ถูกจอง 2 ห้อง

D

ไม่ทราบว่าจะแก้ query เป็นยังไงดีครับ ถึงจะแสดงผลเป็น

ห้อง A ถูกจอง 2 ห้อง

ห้อง B ถูกจอง 1 ห้อง

ห้อง C ยังไม่ถูกจอง

ห้อง D ถูกจอง 2 ห้อง


ผมรู้ว่าติดช่วง

Code (PHP)
if($arr2['room_now']!='0' && $arr2['room_now']!='')



แต่นึกหลักการไม่ออก

ขอคำแนะนำด้วยนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-21 08:41:06 By : asustak
 


 

No. 7



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ผมไม่รู้ว่าคุณออกแบบฐานข้อมูลอะไรยังไง

ปัญหานี้ คงไม่ยากกระมัง
ไม่เห็นจะมีระบุวันที่การแสดงเลย ล่ะคับ ว่าจองหลังจากวันนี้ หรือใช้งานไปแล้ว ข้อมูลเก่าๆ มันไม่ออกมาด้วย ?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-21 11:12:50 By : pjgunner.com
 


 

No. 8



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

php

รายละเอียดที่ต้องการจะคล้ายลักษณะนี้ครับ


ถ้ามีเช็คห้องพักว่างจากฟอร์ม input มา

ก็จะทำการเช็ค และ query ข้อมูลดังกล่าวมาโชว์ ลักษณะคล้ายกับรูปตัวอย่างครับ


ส่วนของฐานข้อมูลอ้างอิง ตามข้อมูลใน comment แรก ครับ


ประวัติการแก้ไข
2011-11-21 13:03:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-21 12:30:07 By : asustak
 


 

No. 9



โพสกระทู้ ( 283 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ไม่มีใครเข้ามาตอบเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-11-21 21:25:29 By : asustak
 


 

No. 10



โพสกระทู้ ( 29 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตกลงได้ยังครับ พอดีว่าผมก็เจอปัญหานี้เหมือนกัน ขอคำแนะนำที
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-02-22 16:16:36 By : enland
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : รบกวนปรึกษาระบบจองห้องพักหน่อยครับ พอดีมีปัญหานิดหน่อยครับ อยากจะได้คำแนะนำดีๆจากพี่ๆที่มีประสบการณ์ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่