我有预订申请表,我想计算预订日期所需的膳食总数。
我的数据库有字段:
$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 :(得分: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
我用我的表测试了它,它似乎工作正常,但是,没有太多数据我只能轻易测试。如果您有任何问题,请发表评论,我会尽力提供帮助。
答案 2 :(得分:0)
我会给你一个片段作为起点。
假设您希望入住时间最长的前10位客人。
SELECT DATEDIFF(chkout, chkin) AS daysstaying FROM reservations ORDER BY daysstaying DESC LIMIT 10
您可以在查询中进行计算,并使用AS运算符为结果创建别名。我将把它留给您来计算您获得所需结果所需的特定查询。
如果需要经常使用此查询,我还建议您使用视图进行调查。
答案 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'";
不,我也会努力预测未来几个月!