-1

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

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


这是我的桌子:

在此处输入图像描述

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

4

3 回答 3

1

我不是 SQL 专家,但我要做的是编写存储过程

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

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

于 2013-01-06T17:28:02.690 回答
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 的一部分。

于 2013-01-06T18:01:15.973 回答
-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
于 2013-01-06T17:17:46.503 回答