如何计算5天的价格(酒店预订系统)

时间:2013-01-06 17:13:02

标签: php mysql sql phpmyadmin

我有一个酒店预订系统,当用户选择入住酒店的开始日期和结束日期时,我想给出总价:

例如:当用户选择开始日期:2013-08-01,到:2013-08-11(两季默认和旺季)时,天数也不同。


这是我的表:

enter image description here

如何编写SQL命令(MySQL)或者我是否需要使用PHP代码?

3 个答案:

答案 0 :(得分:1)

我不是SQL专家,但我要做的是编写

的存储过程
  1. 查找范围内的所有日期。请参阅http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/

  2. 上的fill_calendar
  3. 对于该范围内的每一天,请检查DAYOFWEEK(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofweek)

答案 1 :(得分:1)

您的数据结构未设置为非常有效地执行此操作。但是,它仍然有可能。

我首先将分开的每个日期分开。将此加入费率表。然后使用基于星期几的大案例陈述来获得汇率。如果费率表中没有匹配项,则使用默认费率:

select sum(case when dayname(thedate) = 'Monday' then coalesce(r.MonPrice, def.MonPrice)
                when dayname(thedate) = 'Tuesday' then coalesce(r.TuePrice, def.TuePrice)
                . . .
                when dayname(thedate) = 'Sunday' then coalesce(r.SunPrice, def.SunPrice) as TotalPrice
from (select strtodate('2013-08-01', '%Y-%m-%d') as thedate union all
      select strtodate('2013-08-02', '%Y-%m-%d') union all
      . . . 
      select strtodate('2013-08-11', '%Y-%m-%d')
     ) dates left outer join
     Rates r
     on dates.thedate between r.date_to and r.date_from cross join
     Rates def
     on def.season_price = 'default'

在这个例子中,我将日期分别放入子查询中。还有其他方法可以做到这一点,但由于您在php中构建查询,这可能是最简单的解决方案。

“...”意味着添加类似的SQL代码,因为“...”不会被识别为SQL的一部分。

答案 2 :(得分:-1)

SELECT 
   Val1,
   Val2,
   Val3,
   (Val1 + Val2 + Val3) as 'Total'
FROM Emp

或者如果你只想要一行:

SELECT 
   SUM(Val1) as 'Val1',
   SUM(Val2) as 'Val2',
   SUM(Val3) as 'Val3',
   (SUM(Val1) + SUM(Val2) + SUM(Val3)) as 'Total'
FROM Emp