私はホテルの予約システムを持っています.ユーザーがホテルに滞在するための開始日と終了日を選択すると、合計金額が表示されます:
たとえば、ユーザーが Start date: 2013-08-01, to : 2013-08-11 (2 シーズンのデフォルト、およびハイ シーズン) を選択した場合、日数の価格も異なります。
これは私のテーブルです:
SQL コマンド (MySQL) を作成するにはどうすればよいですか? または PHP コードを使用する必要がありますか?
私はホテルの予約システムを持っています.ユーザーがホテルに滞在するための開始日と終了日を選択すると、合計金額が表示されます:
たとえば、ユーザーが Start date: 2013-08-01, to : 2013-08-11 (2 シーズンのデフォルト、およびハイ シーズン) を選択した場合、日数の価格も異なります。
これは私のテーブルです:
SQL コマンド (MySQL) を作成するにはどうすればよいですか? または PHP コードを使用する必要がありますか?
データ構造は、これを非常に効率的に行うように設定されていません。ただし、まだ可能です。
滞在の各日付を別々に分割することから始めます。これを料金表に結合します。次に、曜日に基づいた大きなケース ステートメントを使用してレートを取得します。レート テーブルに一致するものがない場合は、デフォルトのレートを使用します。
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 コードを追加することを意味します。
私は 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
Val1,
Val2,
Val3,
(Val1 + Val2 + Val3) as 'Total'
FROM Emp
または、1行だけが必要な場合:
SELECT
SUM(Val1) as 'Val1',
SUM(Val2) as 'Val2',
SUM(Val3) as 'Val3',
(SUM(Val1) + SUM(Val2) + SUM(Val3)) as 'Total'
FROM Emp