2014-03-25 33 views
0

我有預訂應用程序,並且我想計算預訂日期跨度所需的餐飲總數。PHP/MySQL - 計算每個保留的總計

我的數據庫中有字段:

$name - Person reserving 
$chkin - Check in date (DATE yyyy-mm-dd) 
$chkout - Check out date (DATE yyyy-mm-dd) 
$guests - Number of people in group 
$meal - Eating meals (Yes/No) 

所以每個預約我:

// Days of Stay 
$days = (strtotime($chkout) - strtotime($chkin))/(60 * 60 * 24); 

什麼我不知道的是怎麼做的計算數據庫中的每個預訂。

我的每一個預約計算會是這樣的:

$days * $guests 

我將在此查詢欣賞的意見......我想給多少餐將需要做好準備快照給定的月份,weeekend等

謝謝!

回答

0

您可以使用MYSQL日期差異來實現天數計數,然後這可以乘以訪客數量。最後,您需要爲此搜索選擇一個日期範圍。以下是獲取這些值所需的基礎知識或MYSQL。這應該讓你走上正確的軌道,實現你想要的。

SELECT DATEDIFF(a.chkout,a.chkin) * a.guests as meals 
FROM table as a 
WHERE a.chkin > '0000-00-00' AND a.chkout < '0000-00-00 

我與我的一個表測試這一點,它似乎然而,可以正常工作,沒有太多的數據,我只能輕輕地測試。如果您有任何問題,請留下評論,我會盡力提供幫助。

http://www.w3schools.com/sql/func_datediff.asp

+0

我能夠用你的答覆與其他人得到解決方案.. thx! – bash3r

+0

@ bash3r不是問題,很高興你能對它進行排序。 –

0

我給你一個片斷作爲起點。

比方說,你想要的時間最長的前10位客人。

SELECT DATEDIFF(chkout, chkin) AS daysstaying FROM reservations ORDER BY daysstaying DESC LIMIT 10 

您可以在查詢中進行計算並使用AS運算符爲結果創建別名。我將把它留給你來制定出你需要的具體查詢來獲得你需要的結果。

我還建議你調查使用視圖,如果這個查詢需要經常使用。

http://dev.mysql.com/doc/refman/5.5/en/views.html

+0

感謝Erik的回覆,我能夠使用你的和Kickstart的解決方案! – bash3r

1

事情是這樣的: -

SELECT SUM(guests * DATEDIFF(IF(chkin < $start_range, $start_range, chkin), IF(chkout > $end_range, $end_range, chkout))) 
FROM sometable 
WHERE chkin < $end_range 
AND chkout > $start_range 
AND meal = 'Yes' 

使用DATEDIFF()來獲取日期的檢查之間的天數(或者,如果您感興趣的日期範圍後開始)以及結賬日期(或者如果早於您感興趣的日期範圍的結束日期),那麼餐點爲「是」並將其乘以客人人數,然後使用SUM()將其添加到所有預訂中。

+0

感謝您的評論..我和Erik Nedwidek一起使用了您的答案以獲得解決方案! – bash3r

0

我能夠使用Kickstart和Erik的回覆來提出解決方案!謝謝!!

// Get Current Month 
$current_month = date('F'); 

// Current timestamp is assumed, so these find first and last day of THIS month 
$start_range = date('Y-m-01'); // hard-coded '01' for first day 
$end_range = date('Y-m-t'); 

     $sql = "SELECT SUM(DATEDIFF(a.chkout,a.chkin) * a.guests) AS meals 
     FROM reservations AS a 
     WHERE a.chkin > '$start_range' AND a.chkout < '$end_range' 
     AND meal = 'Yes' AND confirm = 'Yes'"; 

不,我會努力做好未來幾個月的預測工作!

+0

您是否想忽視在上個月末前預訂的客人,但在當月的某個時間點退房? – Kickstart

+0

嗯......好問題。我的目標是獲得爲客人提供多少餐的快照。我想可能將這些信息添加到我的FullCalendar中,而不是查看$ current_month它將查看我在FullCalendar中的月份,該月份中FullCalendar將我的預訂從我的數據庫中提取。是啊,我! – bash3r

+0

應對部分在您感興趣的日期範圍內的chkin/out-ranged是我的解決方案所應對的。 – Kickstart