แนะนำการ Query ข้อมูลส่วนนี้ให้หน่อยคับ มีการ join table ด้วยคับเกี่ยวกับการจองห้องพัก มีโค้ดให้ดูคับ
จะอธิบายยังไงดี คือว่า เก็บประเภทห้อง แล้วก้อชื่อห้อง เช่น tblRoom มี 2 ฟิว Roon_ID,RoomType_ID มันติดปัญหาตรงที่ว่า Room_ID มันเก็บหมายเลยห้อง เช่น 516,517,518,519 ส่วน RoomType_ID จะเก็บ ประเภทห้อง เช่น 3,4,5,6 เวลาจองห้องพักมันก้อวิ่งไปที่ RoomType_ID ถ้ามีการจองแล้วมันก้อบอกว่าห้องไม่ว่าง ทั้งๆที่ว่างอยู่อีกหลายห้องแต่มันเป็น RoomType_ID เดียวกัน เช่น
Room_ID RoomType_ID
516 3
517 3
518 3
519 3
จะquery ยังไงดีคับ ผมมีโค้ดให้ดู
// ตรวจสอบห้องที่ว่าง ก่อนที่จะ Insert ลงตาราง Booking
// 1. Select tblTempRoom จะได้ ชนิดห้องพัก และจำนวนห้องที่จอง มีหลาย Row
$query_rcsTR = "SELECT * FROM tblTempRoom WHERE Session_ID = '".session_id()."'";
$rcsTR = mysql_query($query_rcsTR, $conn) or die(mysql_error());
while($row_rcsTR = mysql_fetch_assoc($rcsTR)){ // ชนิดห้องพักที่ n
$rt = $row_rcsTR['RoomType_ID'];
// 3. หาหมายเลขห้องที่ไม่ว่างก่อน จะได้หมายเลขห้องที่ว่าง เป็น Array ตามจำนวน NoRoom ที่ต้องการจอง
$query_rcsBR = "SELECT tblRoom.Room_ID FROM tblRoom, tblBooking, tblBookingRoom WHERE tblBookingRoom.Book_ID = tblBooking.Book_ID AND tblRoom.Room_ID = tblBookingRoom.Room_ID AND tblRoom.RoomType_ID = ".$row_rcsTR['RoomType_ID']." AND (B_CheckIn BETWEEN '".$ch_chkIn."' AND '".$ch_chkOut."') OR (B_CheckOut BETWEEN '".$ch_chkIn."' AND '".$ch_chkOut."') AND (B_Status = 'ค้างค่ามัดจำ' OR B_Status = 'ชำระแล้ว') GROUP BY tblRoom.Room_ID" ;
$rcsBR = mysql_query($query_rcsBR, $conn) or die(mysql_error());
$i = 1;
while($row_rcsBR = mysql_fetch_assoc($rcsBR)){
$arr_br[$i] = $row_rcsBR["Room_ID"];
$i++;
}
// หาห้องที่ว่าง
$query_rcsR = "SELECT Room_ID FROM tblRoom WHERE RoomType_ID = ".$row_rcsTR['RoomType_ID'];
for($i=$i-1;$i>=1;$i--){
$query_rcsR .= " AND Room_ID != '".$arr_br[$i]."'";
}
$query_rcsR .= " LIMIT 0,".$row_rcsTR['TR_NoRoom'];
$rcsR = mysql_query($query_rcsR, $conn) or die(mysql_error());
$totalRows_rcsR = mysql_num_rows($rcsR);
if($totalRows_rcsR < $row_rcsTR['TR_NoRoom']){ // จำนวนห้องที่ว่าง ไม่พอจำนวนห้องที่จอง
// echo "ขออภัยจำนวนห้องที่ท่านจองชนิด...ว่างเพียง....ห้อง";
// วนลูปตรวจสอบให้ครบทุกชนิด แล้วแจ้ง Error ทีเดียว
$arr_error[$rt] = $totalRows_rcsR;
}else{ // เก็บหมายเลขห้องที่ว่างใส่ในตัวแปรก่อน
$j = 1;
while($row_rcsR = mysql_fetch_assoc($rcsR)){
$arr_room[$rt][$j] = $row_rcsR["Room_ID"];
$j++;
}
} // จำนวนห้องที่ว่าง ไม่พอจำนวนห้องที่จอง
}
if(isset($arr_error)){
echo "ขออภัย\n";
while (list($key, $val) = each($arr_error)) {
$query_rcsRT = "SELECT RT_Name FROM tblRoomType WHERE RoomType_ID=".$key;
$rcsRT = mysql_query($query_rcsRT, $conn) or die(mysql_error());
$row_rcsRT = mysql_fetch_assoc($rcsRT);
if($val == 0){
echo "ห้องพักแบบ ".$row_rcsRT['RT_Name']." ไม่มีห้องว่าง\n";
}else{
echo "ห้องพักแบบ ".$row_rcsRT['RT_Name']." มีห้องว่าง $val ห้อง\n";
}
}
exit;
}else{
// เตรียมข้อมูล สำหรับ InsertTag : PHP, MySQL
Date :
2010-12-08 13:22:40
By :
cmdping
View :
1148
Reply :
3
ผมเขียน PHP ไม่เป็นครับ
แต่ที่อยากบอกคือ ถ้าเกี่ยวกับ Code ให้ใส่กรอบแบบนี้จะอ่านง่ายกว่าครับ
Code (PHP)
$query_rcsTR = "SELECT * FROM tblTempRoom WHERE Session_ID = '".session_id()."'";
$rcsTR = mysql_query($query_rcsTR, $conn) or die(mysql_error());
แล้วก็น่าจะบอกว่า คำสั่งบรรทัดไหน ที่คิดว่ามีปัญหา
สิ่งที่ต้องการคืออะไร
และสิ่งที่เป็นอยู่ตอนนี้คืออะไร
แล้วเดี๋ยวจะมีเทพมาตอบให้
Date :
2010-12-08 13:36:05
By :
หางอึ่ง
เปลียน mysql_fetch_assoc ให้เป็น mysql_fetch_array แล็วก็ if($val > 0)
Date :
2010-12-08 16:02:19
By :
kanchen
Load balance : Server 05