0

私は現在、ホテル予約システムを作成しており、tbl_prices テーブルの価格列を照会するにはどうすればよいか疑問に思っています。

私のテーブルは次のようになります。

id          date_from          date_to         price          is_default
1           00-00-0000         00-00-0000      $95               1
2           05-25-2012         05-29-2012      $100              0
3           06-20-2012         06-24-2012      $90               0

最初の行はデフォルトの価格です。したがって、行 2 と行 3 にない日付を誰かが予約した場合、価格は 95 ドルになります。ただし、予約日が 2 行目と 3 行目にある場合、価格は 100 ドルまたは 90 ドルになります。

例 ゲストが 2012 年 5 月 24 日から 2012 年 5 月 26 日までチェックインしたい場合、料金は次のようになります。

1 日目 = $95 2 日目 = $100

2012 年 5 月 26 日はチェックアウト日なので課金されません。

4

2 に答える 2

0

毎日 1 回クエリを実行する場合、デフォルトは 1 つだけで、価格の重複期間はありません。

SELECT price FROM tbl_prices
WHERE ($input_date >= date_from AND $input_date <= date_to) 
      OR is_default = 1
ORDER BY is_default
LIMIT 1
于 2012-04-19T01:23:26.877 に答える
0

非常に簡単な解決策は次のとおりです。

$from = 5-24-2012$till = 5-26-2012

select price, date_to from my_table where date_from <= $from 
ORDER BY date_from ASC LIMIT 1

おそらく、date_to (このクエリで受信) と $til の間でチェックを行うことができます。

if($till <= $date_to) {
    // total cost is price * no. of days of stay
}
else {
   // repeat above query, this time with date_to parameter in where clause
   // total cost is price1 * no. of days in 1st range + .....
}
于 2012-04-19T01:21:36.493 に答える