-1

私はホテルの予約システムを持っています.ユーザーがホテルに滞在するための開始日と終了日を選択すると、合計金額が表示されます:

たとえば、ユーザーが Start date: 2013-08-01, to : 2013-08-11 (2 シーズンのデフォルト、およびハイ シーズン) を選択した場合、日数の価格も異なります。


これは私のテーブルです:

ここに画像の説明を入力

SQL コマンド (MySQL) を作成するにはどうすればよいですか? または PHP コードを使用する必要がありますか?

4

3 に答える 3

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

私は 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 
   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
于 2013-01-06T17:17:46.503 に答える