PHP / MySQL - 计算每个预留的总计

时间:2014-03-25 16:34:35

标签: 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等。

谢谢!

4 个答案:

答案 0 :(得分: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()将其添加到所有预订中。

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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'";

不,我也会努力预测未来几个月!