ขอคำแนะนำ php หรือ mysql หน่อยครับ เกี่ยวกับวันที่

เริ่มโดย Infinity, 21 พฤษภาคม 2012, 18:59:42

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Infinity

เป็นโปรแกรมจองห้องพักนะครับ อันนี้เอามาเฉพาะตารางที่เป็น season มีข้อมูลใน db ดังนี้



ถ้าดึงออกมาให้เห็นกันง่ายๆก็จะออกมาตามนี้




สมมุติว่าลูกค้าจองห้องพักมาวันที่

30 October ถึง 2 November

จะเห็นว่ามันคาบเกี่ยว season กัน ราคาก็ต้องคิดต่างไป

ทีนี้ผมอยากแยก season ให้ออกมาเป็นแบบนี้ครับ


2 Nights (Low)
1 Night (High)


จะเขียนยังไงดีครับ มีวิธี select ตั้งแต่ sql ให้ผลลัพธ์ออกมาแบบนี้เลยไหม

ถ้ามีตัวอย่างด้วยก็ขอบคุณมากเลยครับ
[direct=http://www.thailandadviser.com]Thailand Hotels[/direct] [direct=http://www.krabiholiday.com]Krabi Hotels[/direct] [direct=http://www.chiangmaibooking.com]Chiang Mai Hotels[/direct]

deknakhon

อ้างถึงจาก: Infinity ใน 21 พฤษภาคม 2012, 18:59:42
เป็นโปรแกรมจองห้องพักนะครับ อันนี้เอามาเฉพาะตารางที่เป็น season มีข้อมูลใน db ดังนี้



ถ้าดึงออกมาให้เห็นกันง่ายๆก็จะออกมาตามนี้




สมมุติว่าลูกค้าจองห้องพักมาวันที่

30 October ถึง 2 November

จะเห็นว่ามันคาบเกี่ยว season กัน ราคาก็ต้องคิดต่างไป

ทีนี้ผมอยากแยก season ให้ออกมาเป็นแบบนี้ครับ


2 Nights (Low)
1 Night (High)


จะเขียนยังไงดีครับ มีวิธี select ตั้งแต่ sql ให้ผลลัพธ์ออกมาแบบนี้เลยไหม

ถ้ามีตัวอย่างด้วยก็ขอบคุณมากเลยครับ

ฐานข้อมูบไม่คอยสัมพันธ์ กับระบบเท่าไรนะครับ
ทำงานที่ไหน ฐานข้อมูลคุนๆๆ นะครับ
เดียวผมเขียน Query ให้ครับ
รับพัฒนาโปรแกรม PHP Mysql
รับออกแบบระบบโปรแกรม
รับวางระบบเครือข่ายคอมพิวเตอร์

deknakhon


<?
$hostDB = "localhost";
$userDB = "root";   // ใส่ user name
$passwdDB = "";   // ใส่ password
$dbname = "db_lab";   // ชื่อ database

@mysql_connect($hostDB,$userDB,$passwdDB);
@mysql_query("SET NAMES utf8");
mysql_select_db($dbname);

mysql_connect($hostDB,$userDB,$passwdDB) or die (mysql_error()." Cannot  Config Database Server");


echo "วันที่เข้าพัก".$arrival_date='2012-05-11';
echo "<br>";
echo "วันที่สิ้นสุด".$departure_date='2012-05-20';
echo "<br>";
$sql = "SELECT * FROM tb_seasons ";
$sql .= "WHERE tb_seasons.start_season<='$departure_date' ";
$sql .= "AND tb_seasons.end_season>='$arrival_date' ";
$sql .= "ORDER BY tb_seasons.start_season   ASC ";

$result_rate = mysql_query($sql) or die (mysql_error()."Err Can not to result 1") ;
$NRow = mysql_num_rows($result_rate);

$TOTALRATE = 0;

$totalextra_price = 0;
$start_date = $arrival_date;

for($i=0;$i<mysql_num_rows($result_rate);$i++){
$rs_rate = mysql_fetch_array($result_rate) ;
if($i+1==mysql_num_rows($result_rate)){
$end_date = $departure_date;
$add = 0;
}else{
$end_date = $rs_rate['end_season'];
$add = 1;
}

$Snight = 0;
$sql = "SELECT DATEDIFF('$end_date','$start_date')+$add AS snight ";
//echo  $sql;
$rs = mysql_query($sql);
$Snight = mysql_result($rs,0,'snight');
//echo "<br>";
$sql = "SELECT ADDDATE('".$rs_rate['end_season']."',INTERVAL 1 DAY) AS next_season ";
//echo $sql;
//echo "<br>";
$rs = mysql_query($sql);
$start_date = mysql_result($rs,0,'next_season');



//echo "########################################################";
//echo "<br>";
echo "Room Rate ". $rs_rate['RMRATE']."<br>";
echo   $rs_rate['season_name']." $Snight Night<br>";
$TOTALRATE += $rs_rate['RMRATE']*$Snight;
echo "Total Rate ".number_format($TOTALRATE,2);
echo "<br>";


}
?>

SQL

CREATE TABLE `tb_seasons` (
`season_id` INT(10) NULL DEFAULT NULL,
`season_name` VARCHAR(50) NULL DEFAULT NULL,
`start_season` DATETIME NOT NULL,
`end_season` DATETIME NOT NULL,
`RMRATE` DECIMAL(10,0) NOT NULL
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

INSERT INTO `tb_seasons` VALUES (1, 'A', '2012-05-01 20:32:31', '2012-05-15 20:32:34', 200);
INSERT INTO `tb_seasons` VALUES (2, 'B', '2012-05-16 20:33:16', '2012-05-30 20:33:26', 300);




หลังการคำนวณ
วันที่เข้าพัก2012-05-11
วันที่สิ้นสุด2012-05-20
Room Rate 200
A 5 Night
Total Rate 1,000.00
Room Rate 300
B 4 Night
Total Rate 2,200.00

ถ้ามีประโยชน์ขอ +1 ด้วยตอบแทน
เขียนให้สดๆๆเลยครับ
รับพัฒนาโปรแกรม PHP Mysql
รับออกแบบระบบโปรแกรม
รับวางระบบเครือข่ายคอมพิวเตอร์

Infinity

+1 ให้ก่อนเลยครับ สำหรับน้ำใจ ขอบคุณมากครับ

ฐานข้อมูลผมแยก season , price , type room ไว้ต่างหากกันน่ะ

จริงๆ แล้วมันควรจะเป็นยังไงเหรอครับ :P
[direct=http://www.thailandadviser.com]Thailand Hotels[/direct] [direct=http://www.krabiholiday.com]Krabi Hotels[/direct] [direct=http://www.chiangmaibooking.com]Chiang Mai Hotels[/direct]

kobkung

ถูกแล้ว เพียงแต่ว่าเวลา query ต้อง loop ทีละวัน แยกราคาของแต่ละวันออกมาเลย ว่าแต่ละวันเท่าไหร่
เอามา sum และแสดงในบิลได้ด้วย เวลาแสดงบิลก็ loop ทุกวันเลย

ใน query ใช้ between datestart and dateexpire  โดย and roomtype เข้าไปด้วย table join เฉยๆ
เราเป็นบริษัท รับทำเว็บไซต์ แก้เว็บเดิม เขียน Php+Mysql+jQuery+css+bootstrap  งานตามสั่ง ประสบการณ์ จะ 19 ปี ละจ้า
[direct=http://www.smilephp.com]Smilephp.com[/direct] รับทำเว็บไซต์บริษัท e-commerce + ระบบชำระเงิน paypal,ธนาคาร  เว็บบริษัท เว็บขายของ ระบบจอง เช่า เขียน PHP ได้ทุกแนว  ช่วงนี้เน้นรับงาน ERP ระบบเอกสารบริษัท ,บัญชี ,  Barcode, Stock , Warehouse , Logistic ติดต่อ 086-364-5262
[direct=http://www.sellerorder.com ระบบหลังบ้าน จัดการ Order ขายของ  ช่วงนี้หาคนทดสอบฟรี ขอได้ตามเมลในเว็บ[/direct]
งดตอบคนทำเว็บนอกลู่นอกทาง ไม่ทำเว็บ WP ปั่นแชร์ เว็บประมูล สคริปปั่นใดๆ ไม่ทำเว็บบอลและพ

deknakhon

อ้างถึงจาก: Infinity ใน 21 พฤษภาคม 2012, 21:51:50
+1 ให้ก่อนเลยครับ สำหรับน้ำใจ ขอบคุณมากครับ

ฐานข้อมูลผมแยก season , price , type room ไว้ต่างหากกันน่ะ

จริงๆ แล้วมันควรจะเป็นยังไงเหรอครับ :P

ถ้ามีการถึง ผมใช้ตารางเก็บราคาอีกตารางนะครับ
เก็บ Season_id  | rmtype_code | rmrate
แล้วมา inner join กัน
รับพัฒนาโปรแกรม PHP Mysql
รับออกแบบระบบโปรแกรม
รับวางระบบเครือข่ายคอมพิวเตอร์

UnzO

กำลังทำระบบเดียวกันเลยนะครับเนี้ย แต่ผมทำเป็น service ครับ ตอนนี้ก็กำลังทำตรงนี้อยู่ดีเลยครับ

สำหรับผม ผมใช้วิธีการ join สามตารางเข้าด้วยกันครับ คือ ตารางของ booking, roomtype และ season ครับ แล้วจับมายัดใส่ array แล้วคำนวนเอาครับ ผมจะแยกเป็นวันๆ เอาครับ โดย แต่ละการ booking จะมีตาราง bill ที่เอามาเก็บว่าการ book ครั้งนี้ ยอดเท่าไหร่ ตั้งแต่วันที่เท่าไหร่ถึงวันที่เท่าไหร่ และก็ไป join กับตาราง booking ที่เก็บแต่ละวันอีกทีครับ (booking จะเก็บว่า relate กับ bill ไหน)

จริงๆ ระบบผมทำมันซับซ้อนมากๆ ครับ ผมก็ติดขัดอยู่เรื่อยๆ ต้องใช้เวลาหน่อย แหะๆ

ยังไงถ้ามีปัญหายังไง pm มาหาผมได้ครับ เผื่อจะได้แชร์ความรู้กันครับ

Infinity

ขอบคุณ deknakhon , kobkung , UnzO มากเลยครับ ตอนนี้ทำได้แล้ว

ตอนนี้มีอีกปัญหาคือวิธีการทำ room available น่ะครับ

จะเก็บออกแบบตารางเก็บข้อมูลกันยังไงดี
[direct=http://www.thailandadviser.com]Thailand Hotels[/direct] [direct=http://www.krabiholiday.com]Krabi Hotels[/direct] [direct=http://www.chiangmaibooking.com]Chiang Mai Hotels[/direct]