我有一个酒店预订系统,当用户选择入住酒店的开始日期和结束日期时,我想给出总价:
例如:当用户选择开始日期:2013-08-01,到:2013-08-11(两个季节默认,和旺季)时,天的价格也是不同的。
这是我的桌子:
如何编写 SQL 命令(MySQL)或者我需要使用 PHP 代码?
我有一个酒店预订系统,当用户选择入住酒店的开始日期和结束日期时,我想给出总价:
例如:当用户选择开始日期:2013-08-01,到:2013-08-11(两个季节默认,和旺季)时,天的价格也是不同的。
这是我的桌子:
如何编写 SQL 命令(MySQL)或者我需要使用 PHP 代码?
我不是 SQL 专家,但我要做的是编写存储过程
查找范围内的所有日期。请参阅http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/上的 fill_calendar
对于范围内的每一天,检查 DAYOFWEEK (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofweek)
您的数据结构没有设置为非常有效地执行此操作。但是,它仍然是可能的。
我会先分开每个逗留日期。将此加入费率表。然后使用基于星期几的大案例陈述来获得费率。如果费率表中没有匹配项,则使用默认费率:
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 的一部分。
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