สอบถามเรื่องระบบจองห้องพัก งมมาหลายวันแล้วครับ รบกวนขอคำแนะนำด้วยครับ
ผมลอง search หา กระทู้เก่าๆที่เกี่ยวกับการจองห้องพัก
Code (PHP)
<?
date_default_timezone_set('UTC');
/* $startdate = $_GET['txtChekIn']; // '2011-08-01';
$enddate = $_GET['txtCheckOut']; // '2011-08-31';*/
$startdate ='2011-11-25'; // '2011-08-01';
$enddate ='2011-11-26'; // '2011-08-01';
while (strtotime($startdate) <= strtotime($enddate))
{
echo $startdate."<br>";
$strSQL = "SELECT * FROM room WHERE 1";
$objQuery = mysql_query($strSQL) or die (mysql_error());
$a=0;
while($objResult = mysql_fetch_array($objQuery))
{
$strSQL2 = "SELECT * FROM rent WHERE ( '$startdate' BETWEEN check_in and check_out) AND rid = '".$$objResult["rid"]."' ";
$objQuery2 = mysql_query($strSQL2) or die (mysql_error());
$objResult2 = mysql_fetch_array($objQuery2);
if(!$objResult2)
{
echo "ห้อง ".$objResult2['rid']." ว่าง<br>";
}
}
echo "<hr>";
$startdate = date ("Y-m-d", strtotime("+1 day", strtotime($startdate)));
}
?>
ถ้าเป็น code ตัวนี้ตามที่ที่ mr.win โพสไว้
ก็คือลักษณะเป็น loop ซ้อน loop
Loop ที่ 1 Code (PHP)
while (strtotime($startdate) <= strtotime($enddate))
คือเอาวันที่มาแปลงเป็น Unix timestamp
Code (PHP)
$strSQL = "SELECT * FROM room WHERE 1";
คือการ query จำนวนห้องที่มีอยู่ทั้งหมดออกมา
สั่งให้ Code (PHP)
while($objResult = mysql_fetch_array($objQuery))
ดึงข้อมูลดังกล่าวออกมา
Code (PHP)
$strSQL2 = "SELECT * FROM rent WHERE ( '$startdate' BETWEEN check_in and check_out) AND rid = '".$$objResult["rid"]."' "; ใช้เช็คห้องว่าง
จากที่ผมลองใช้ดูแล้ว ไม่พบห้องขึ้นโชว์เลยครับ
รบกวนข้อคำแนะนำด้วยครับ
ส่วนฐานข้อมูลที่ผมเพิ่มก็อยู่ด้านบนครับ
ส่วนข้างล่างนี้คือตัวที่ผมลอง ทดสอบเล่นๆ
Code (PHP)
<?
date_default_timezone_set('UTC');
/* $startdate = $_GET['txtChekIn']; // '2011-08-01';
$enddate = $_GET['txtCheckOut']; // '2011-08-31';*/
$startdate ='2011-11-25'; // '2011-08-01';
$enddate ='2011-11-26'; // '2011-08-01';
while (strtotime($startdate) <= strtotime($enddate))
{
echo $startdate."<br>";
$strSQL = "SELECT * FROM room WHERE 1";
$objQuery = mysql_query($strSQL) or die (mysql_error());
while($objResult = mysql_fetch_array($objQuery))
{
$strSQL2 = "SELECT * FROM rent WHERE ( '$startdate' BETWEEN check_in and check_out) AND rid = '".$$objResult["rid"]."' ";
$objQuery2 = mysql_query($strSQL2) or die (mysql_error());
$objResult2 = mysql_fetch_array($objQuery2);
if(!$objResult2)
{
echo "ห้อง ".$objResult['rid']." ว่าง<br>";
}
}
echo "<hr>";
$startdate = date ("Y-m-d", strtotime("+1 day", strtotime($startdate)));
}
?>
แต่เหมือนว่าการแสดงผลยังผิดอยู่
ก็คือ แสดงข้อมูลดังนี้
2011-11-25
ห้อง 1 ว่าง
ห้อง 2 ว่าง
ห้อง 3 ว่าง
ห้อง 4 ว่าง
ห้อง 5 ว่าง
ห้อง 6 ว่าง
ห้อง 7 ว่าง
ห้อง 8 ว่าง
ห้อง 9 ว่าง
ห้อง 10 ว่าง
ห้อง 11 ว่าง
ห้อง 12 ว่าง
ห้อง 13 ว่าง
ห้อง 14 ว่าง
ห้อง 15 ว่าง
ห้อง 16 ว่าง
ห้อง 17 ว่าง
ห้อง 18 ว่าง
ห้อง 19 ว่าง
ห้อง 20 ว่าง
ห้อง 21 ว่าง
ห้อง 22 ว่าง
ห้อง 23 ว่าง
ห้อง 24 ว่าง
ห้อง 25 ว่าง
ห้อง 26 ว่าง
ห้อง 27 ว่าง
ห้อง 28 ว่าง
ห้อง 29 ว่าง
ห้อง 30 ว่าง
ห้อง 31 ว่าง
ห้อง 32 ว่าง
ห้อง 33 ว่าง
ห้อง 34 ว่าง
ห้อง 35 ว่าง
ห้อง 36 ว่าง
ห้อง 37 ว่าง
ห้อง 38 ว่าง
ห้อง 39 ว่าง
ห้อง 40 ว่าง
ห้อง 41 ว่าง
ห้อง 42 ว่าง
ห้อง 43 ว่าง
ห้อง 44 ว่าง
ห้อง 45 ว่าง
ห้อง 46 ว่าง
ห้อง 47 ว่าง
ห้อง 48 ว่าง
ห้อง 49 ว่าง
ห้อง 50 ว่าง
ห้อง 51 ว่าง
ห้อง 52 ว่าง
ห้อง 53 ว่าง
ห้อง 54 ว่าง
ห้อง 55 ว่าง
ห้อง 56 ว่าง
ห้อง 57 ว่าง
ห้อง 58 ว่าง
ห้อง 59 ว่าง
ห้อง 60 ว่าง
ห้อง 61 ว่าง
ห้อง 62 ว่าง
ห้อง 63 ว่าง
ห้อง 64 ว่าง
ห้อง 65 ว่าง
ห้อง 66 ว่าง
ห้อง 67 ว่าง
ห้อง 68 ว่าง
ห้อง 69 ว่าง
ห้อง 70 ว่าง
ห้อง 71 ว่าง
ห้อง 72 ว่าง
ห้อง 73 ว่าง
ห้อง 74 ว่าง
ห้อง 75 ว่าง
ห้อง 76 ว่าง
ห้อง 77 ว่าง
ห้อง 78 ว่าง
ห้อง 79 ว่าง
ห้อง 80 ว่าง
ห้อง 81 ว่าง
ห้อง 82 ว่าง
ห้อง 83 ว่าง
ห้อง 84 ว่าง
ห้อง 85 ว่าง
ห้อง 86 ว่าง
ห้อง 87 ว่าง
ห้อง 88 ว่าง
ห้อง 89 ว่าง
ห้อง 90 ว่าง
ห้อง 91 ว่าง
ห้อง 92 ว่าง
ห้อง 93 ว่าง
ห้อง 94 ว่าง
ห้อง 95 ว่าง
ห้อง 96 ว่าง
ห้อง 97 ว่าง
ห้อง 98 ว่าง
ห้อง 99 ว่าง
ห้อง 100 ว่าง
ห้อง 101 ว่าง
ห้อง 102 ว่าง
ห้อง 103 ว่าง
ห้อง 104 ว่าง
ห้อง 105 ว่าง
ห้อง 106 ว่าง
ห้อง 107 ว่าง
ห้อง 108 ว่าง
ห้อง 109 ว่าง
ห้อง 110 ว่าง
ห้อง 111 ว่าง
ห้อง 112 ว่าง
ห้อง 113 ว่าง
ห้อง 114 ว่าง
ห้อง 115 ว่าง
ห้อง 116 ว่าง
ห้อง 117 ว่าง
ห้อง 118 ว่าง
ห้อง 119 ว่าง
ห้อง 120 ว่าง
ห้อง 121 ว่าง
ห้อง 122 ว่าง
ห้อง 123 ว่าง
ห้อง 124 ว่าง
ห้อง 125 ว่าง
ห้อง 126 ว่าง
ห้อง 127 ว่าง
ห้อง 128 ว่าง
ห้อง 129 ว่าง
ห้อง 130 ว่าง
ห้อง 131 ว่าง
ห้อง 132 ว่าง
ห้อง 133 ว่าง
ห้อง 134 ว่าง
ห้อง 135 ว่าง
ห้อง 136 ว่าง
ห้อง 137 ว่าง
ห้อง 138 ว่าง
ห้อง 139 ว่าง
ห้อง 140 ว่าง
ห้อง 141 ว่าง
ห้อง 142 ว่าง
ห้อง 143 ว่าง
ห้อง 144 ว่าง
ห้อง 145 ว่าง
ห้อง 146 ว่าง
ห้อง 147 ว่าง
ห้อง 148 ว่าง
ห้อง 149 ว่าง
2011-11-26
ห้อง 1 ว่าง
ห้อง 2 ว่าง
ห้อง 3 ว่าง
ห้อง 4 ว่าง
ห้อง 5 ว่าง
ห้อง 6 ว่าง
ห้อง 7 ว่าง
ห้อง 8 ว่าง
ห้อง 9 ว่าง
ห้อง 10 ว่าง
ห้อง 11 ว่าง
ห้อง 12 ว่าง
ห้อง 13 ว่าง
ห้อง 14 ว่าง
ห้อง 15 ว่าง
ห้อง 16 ว่าง
ห้อง 17 ว่าง
ห้อง 18 ว่าง
ห้อง 19 ว่าง
ห้อง 20 ว่าง
ห้อง 21 ว่าง
ห้อง 22 ว่าง
ห้อง 23 ว่าง
ห้อง 24 ว่าง
ห้อง 25 ว่าง
ห้อง 26 ว่าง
ห้อง 27 ว่าง
ห้อง 28 ว่าง
ห้อง 29 ว่าง
ห้อง 30 ว่าง
ห้อง 31 ว่าง
ห้อง 32 ว่าง
ห้อง 33 ว่าง
ห้อง 34 ว่าง
ห้อง 35 ว่าง
ห้อง 36 ว่าง
ห้อง 37 ว่าง
ห้อง 38 ว่าง
ห้อง 39 ว่าง
ห้อง 40 ว่าง
ห้อง 41 ว่าง
ห้อง 42 ว่าง
ห้อง 43 ว่าง
ห้อง 44 ว่าง
ห้อง 45 ว่าง
ห้อง 46 ว่าง
ห้อง 47 ว่าง
ห้อง 48 ว่าง
ห้อง 49 ว่าง
ห้อง 50 ว่าง
ห้อง 51 ว่าง
ห้อง 52 ว่าง
ห้อง 53 ว่าง
ห้อง 54 ว่าง
ห้อง 55 ว่าง
ห้อง 56 ว่าง
ห้อง 57 ว่าง
ห้อง 58 ว่าง
ห้อง 59 ว่าง
ห้อง 60 ว่าง
ห้อง 61 ว่าง
ห้อง 62 ว่าง
ห้อง 63 ว่าง
ห้อง 64 ว่าง
ห้อง 65 ว่าง
ห้อง 66 ว่าง
ห้อง 67 ว่าง
ห้อง 68 ว่าง
ห้อง 69 ว่าง
ห้อง 70 ว่าง
ห้อง 71 ว่าง
ห้อง 72 ว่าง
ห้อง 73 ว่าง
ห้อง 74 ว่าง
ห้อง 75 ว่าง
ห้อง 76 ว่าง
ห้อง 77 ว่าง
ห้อง 78 ว่าง
ห้อง 79 ว่าง
ห้อง 80 ว่าง
ห้อง 81 ว่าง
ห้อง 82 ว่าง
ห้อง 83 ว่าง
ห้อง 84 ว่าง
ห้อง 85 ว่าง
ห้อง 86 ว่าง
ห้อง 87 ว่าง
ห้อง 88 ว่าง
ห้อง 89 ว่าง
ห้อง 90 ว่าง
ห้อง 91 ว่าง
ห้อง 92 ว่าง
ห้อง 93 ว่าง
ห้อง 94 ว่าง
ห้อง 95 ว่าง
ห้อง 96 ว่าง
ห้อง 97 ว่าง
ห้อง 98 ว่าง
ห้อง 99 ว่าง
ห้อง 100 ว่าง
ห้อง 101 ว่าง
ห้อง 102 ว่าง
ห้อง 103 ว่าง
ห้อง 104 ว่าง
ห้อง 105 ว่าง
ห้อง 106 ว่าง
ห้อง 107 ว่าง
ห้อง 108 ว่าง
ห้อง 109 ว่าง
ห้อง 110 ว่าง
ห้อง 111 ว่าง
ห้อง 112 ว่าง
ห้อง 113 ว่าง
ห้อง 114 ว่าง
ห้อง 115 ว่าง
ห้อง 116 ว่าง
ห้อง 117 ว่าง
ห้อง 118 ว่าง
ห้อง 119 ว่าง
ห้อง 120 ว่าง
ห้อง 121 ว่าง
ห้อง 122 ว่าง
ห้อง 123 ว่าง
ห้อง 124 ว่าง
ห้อง 125 ว่าง
ห้อง 126 ว่าง
ห้อง 127 ว่าง
ห้อง 128 ว่าง
ห้อง 129 ว่าง
ห้อง 130 ว่าง
ห้อง 131 ว่าง
ห้อง 132 ว่าง
ห้อง 133 ว่าง
ห้อง 134 ว่าง
ห้อง 135 ว่าง
ห้อง 136 ว่าง
ห้อง 137 ว่าง
ห้อง 138 ว่าง
ห้อง 139 ว่าง
ห้อง 140 ว่าง
ห้อง 141 ว่าง
ห้อง 142 ว่าง
ห้อง 143 ว่าง
ห้อง 144 ว่าง
ห้อง 145 ว่าง
ห้อง 146 ว่าง
ห้อง 147 ว่าง
ห้อง 148 ว่าง
ห้อง 149 ว่าง
ซึ่งจริงๆแล้ว ใน db มีรายการจองดังนี้
rid 1 2011-11-24 2011-11-25
rid 2 2011-11-25 2011-11-30
rid 1 2011-11-26 2011-11-27
rid 3 2011-11-25 2011-11-28
ไม่ทราบว่าผมจะเช็คยังไงให้แสดงผลได้ถูกต้องตามที่ต้องการครับ
ประวัติการแก้ไข 2011-11-24 11:12:22
Date :
2011-11-24 08:23:35
By :
asustak
โอเคครับ ผมได้แล้วครับ
ผิดที่ query Code (PHP)
'".$$objResult["rid"]."' ต้องเป็น '$objResult[rid]'
แต่ตอนนี้ติดปัญหาคือ
Code (PHP)
while($objResult = mysql_fetch_array($objQuery))
{
$strSQL2 = "SELECT *,count(rid) as avaliable FROM rent WHERE ('$startdate' BETWEEN check_in and check_out) AND rid = '$objResult[rid]' group by rid";
$objQuery2 = mysql_query($strSQL2) or die (mysql_error());
$objResult2 = mysql_fetch_array($objQuery2);
if(!$objResult2)
{
echo "ห้อง ".$objResult['rid']." ว่าง<br>";
}else{
echo "ห้อง ".$objResult['rid']." ไม่ว่าง<br>";
}
}
ต้องการให้ count ห้องที่ว่าง แต่ละประเภท ว่ามีกี่ห้อง
แค่ค่าที่ count ไม่ออกครับ
ตอนนี้เบื้องต้นผมได้ลองจัด tid มาใส่ใน ตาราง rent เรียบร้อยแล้ว
ก็เท่ากับว่าตาราง rent จะมีประเภทห้องเข้ามาด้วย
ไม่ทราบว่าในเคสนี้ ผมต้อง loop ข้อมูลอีกรอบหรือเปล่าถึงจะสามารถ count ข้อมูลออกมาได้
รบกวนขอ idea หรือ แนวทางในการเขียนหน่อยครับ
ประวัติการแก้ไข 2011-11-24 12:10:25 2011-11-24 12:24:44
Date :
2011-11-24 12:00:06
By :
asustak
สอบถามหน่อยครับ ตอนนี้ผมลอง query ข้อมูลออกมา
Code (PHP)
<?
date_default_timezone_set('UTC');
/* $startdate = $_GET['txtChekIn']; // '2011-08-01';
$enddate = $_GET['txtCheckOut']; // '2011-08-31';*/
$startdate ='2011-11-24'; // '2011-08-01';
$enddate ='2011-11-30'; // '2011-08-01';
while (strtotime($startdate) <= strtotime($enddate))
{
echo $startdate."<br>";
$strSQL = "SELECT * FROM room WHERE 1";
$objQuery = mysql_query($strSQL) or die (mysql_error());
while($objResult = mysql_fetch_array($objQuery))
{
$strSQL2 = "SELECT *FROM rent WHERE ('$startdate' BETWEEN check_in and check_out) AND rid = '$objResult[rid]' ";
$objQuery2 = mysql_query($strSQL2) or die (mysql_error());
$row = mysql_num_rows($objQuery2);
$objResult2 = mysql_fetch_array($objQuery2);
if(!$objResult2)
{
//echo "ประเภท ".$objResult['tid']." ห้อง ".$objResult['rid']." ว่าง<br>";
}else{
echo "ประเภท ".$objResult['tid']." ห้อง ".$objResult['rid']." ไม่ว่าง<br>";
}
}
echo "<hr>";
$startdate = date ("Y-m-d", strtotime("+1 day", strtotime($startdate)));
}
?>
ได้ข้อมูลดังนี้ครับ
2011-11-24
ประเภท 1 ห้อง 1 ไม่ว่าง
2011-11-25
ประเภท 1 ห้อง 1 ไม่ว่าง
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 2 ห้อง 53 ไม่ว่าง
2011-11-26
ประเภท 1 ห้อง 1 ไม่ว่าง
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 2 ห้อง 53 ไม่ว่าง
2011-11-27
ประเภท 1 ห้อง 1 ไม่ว่าง
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 2 ห้อง 53 ไม่ว่าง
2011-11-28
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 2 ห้อง 53 ไม่ว่าง
2011-11-29
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 7 ห้อง 149 ไม่ว่าง
2011-11-30
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 7 ห้อง 149 ไม่ว่าง
ผมต้องการรวมข้อมูลในส่วนของ
2011-11-25
ประเภท 1 ห้อง 1 ไม่ว่าง
ประเภท 1 ห้อง 2 ไม่ว่าง
ประเภท 2 ห้อง 53 ไม่ว่าง
ให้แสดงผลเป็น
2011-11-25
ประเภท 1 จอง 2 ห้อง
ประเภท 2 จอง 1 ห้อง
แบบนี้ครับ
จริงๆแล้วผมต้องการจำนวนของ row แต่ละ type ของ แต่ละช่วงเวลาออกมานะครับ
เพื่อมาทำเป็นตัวเช็ค แสดงจำนวนห้องที่ว่าง
ประวัติการแก้ไข 2011-11-24 14:00:08
Date :
2011-11-24 13:35:45
By :
asustak
เว็บนี้ พี่เดี่ยว ทำไว้ไม่ใช่รึ
Date :
2011-11-24 13:55:06
By :
ไวยวิทย์
ใช่ครับ แต่พี่เดี่ยวหาย -*-
Date :
2011-11-24 13:58:30
By :
asustak
Code (PHP)
while($objResult = mysql_fetch_array($objQuery))
{
$strSQL2 = "SELECT count(rid) as avaliable FROM rent WHERE ('$startdate' BETWEEN check_in and check_out) AND rid = '$objResult[rid]' group by rid";
$objQuery2 = mysql_query($strSQL2) or die (mysql_error());
$objResult2 = mysql_fetch_array($objQuery2);
if(!$objResult2)
{
echo "$objResult['avaliable']" ว่าง<br>";
} else {
echo "$objResult['avaliable']" ไม่ว่าง<br>";
}
}
Date :
2011-11-24 19:35:15
By :
ozma
ขอบคุณครับ
Date :
2011-11-24 19:56:24
By :
asustak
ทำไมไม่ Query ให้จบ ในอันเดียวไปเลย ครับ
SELECT a.* FROM room a
LEFT OUTER JOIN (SELECT rent.* FROM rent WHERE ('$startdate' BETWEEN rent.check_in and rent.check_out) AND rent.rid =a.rid) b ON a.rid=b.rid ORDER BY a.tid,a.rid ASC
ถ้าต้องการข้อมูลการจอง เข้าไปด้วย ก็ไป LEFT OUTER JOIN เข้าไปใน ALIAS Table Name->b
Date :
2011-11-29 10:56:32
By :
fossil31
Load balance : Server 01