Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL-计算每个预订的总计_Php_Mysql - Fatal编程技术网

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

PHP/MySQL-计算每个预订的总计,php,mysql,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

我有一个预订申请,我想计算预订日期跨度所需的用餐总数

我的数据库包含以下字段:

$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
如果您能就这个问题提出建议,我将不胜感激。。。我试着给出一个快照,说明一个月、一周等需要准备多少顿饭


谢谢大家!

您可以使用MYSQL date diff来计算天数,然后将其乘以来宾数。最后,您需要为此搜索选择一个日期范围。下面是获取这些值所需的基础知识或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
选择DATEDIFF(a.chkout,a.chkin)*a.客人作为餐点
从表中作为
其中a.chkin>'0000-00-00'和a.chkout<'0000-00-00
我已经用我的一个表测试了这个,它似乎工作正常,但是,没有太多数据,我只能轻轻地测试。如果您有任何问题,请留下评论,我将尽力进一步帮助您


我给你一个片段作为起点

假设你想要入住时间最长的前十名客人

SELECT DATEDIFF(chkout, chkin) AS daysstaying FROM reservations ORDER BY daysstaying DESC LIMIT 10
您可以在查询中进行计算,并使用AS运算符为结果创建别名。我将把它留给您来解决您需要的特定查询,以获得您需要的结果

如果需要经常使用此查询,我还建议您研究使用视图

类似这样的内容:-

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(如果(chkin<$start\u range,$start\u range,chkin),如果(chkout>$end\u range,$end\u range,chkout)))
从某处
其中chkin<$end\u范围
和chkout>$start\u范围
而膳食=‘是的’

使用DATEDIFF()获取入住日期(或者如果您感兴趣的日期范围的开始日期较晚)和退房日期(或者如果您感兴趣的日期范围的结束日期较早)之间的天数,其中用餐为“是”,并将其乘以客人数,然后使用SUM()将它们添加到所有预订中。

我能够使用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'";
//获取当前月份
$current_month=日期('F');
//假定当前时间戳,因此这些时间戳将查找本月的第一天和最后一天
$start_range=日期('Y-m-01');//第一天硬编码“01”
$end_范围=日期('Y-m-t');
$sql=“选择SUM(DATEDIFF(a.chkout,a.chkin)*a.guests)作为膳食
从保留地作为
其中a.chkin>“$start\u range”和a.chkout<$end\u range”
用餐=‘是’和确认=‘是’;

不,我也会为未来几个月的预测而努力

谢谢你的评论。。我使用了你的回复和Erik Nedwidek的回复来获得解决方案!感谢Erik的回复,我能够使用您的和Kickstart的解决方案!我能够利用你的回复和其他人一起得到一个解决方案。。谢谢@bash3r没问题,很高兴你已经解决了。你想忽略在上个月底之前预订但在本月某个时候退房的客人吗?嗯。。。好问题。我的目标是得到一张为客人提供多少餐的快照。我想可能会将此信息添加到我的FullCalendar中,而不是查看$current_month,而是查看我在FullCalendar中的月份,我使用FullCalendar从数据库中提取我的预订。是的,我!处理部分在您感兴趣的日期范围内的chkin/out-range是我的解决方案所能处理的。@Kickstart让我再次测试您的代码,我在以前的尝试中无法使其工作。。但现在我聪明了几天!没问题(我确实做了一个小的修正,因为我意识到我有一个<我想有一个>)。也许值得在sqlfiddle上放置一个测试表,以便我们可以检查它。