2

製品の表があります。製品はレンタルできます。別のテーブルvalidity_periodsがあります。これがテーブルの構造です。

http://sqlfiddle.com/#!2/c97e3

validity_periods

id  description
1   7 Days
2   14 Days
3   21 Days
4   1 Month
products

id              : 1
title           : Car
description     : None
validaity_id    : 1
category_id     : 1
rent_count      : 0
current_status  : available
start_date      : 0000-00-00 00:00:00
end_date        : 0000-00-00 00:00:00

今、私は次のことをしています。

ユーザーがこの製品を作成するときに、この製品の最大有効期間を選択するためのドロップダウンを提供します。
ドロップダウンには有効期間が含まれています。そして、validity_idをproductとともに保存します。
誰かがこの製品をレンタルするとき、私はcurrent_statusを利用可能からレンタルに更新します。
IDを取得して現在の日付を検索し、start_dateとend_dateを生成して、製品を更新します。
ここで私は2つのことが必要です
最初に:多くの作業を行うことを目的とした単純な解決策はありますか?単にstart_dateとend_dateを生成するために何かをしますか?必要に応じて、validity_periodsのスキーマを変更できます。
2番目:製品を表示すると、ステータスと残りの日数が表示されます(製品が再びレンタル可能になった後)。
では、どうすればこれら2つのタスクを実行できますか。

製品Carがレンタルされ、現在

id              : 1
title           : Car
description     : None
validaity_id    : 1
category_id     : 1
rent_count      : 1
current_status  : rented
start_date      : 2012-12-10 01:30:00
end_date        : 2012-12-17 06:50:00

次に、この情報を表示する必要があります。

Item        : Car
Status      : Rented
Rent Count  : 1
Remaining   : 3 Days 23 Hours   
4

1 に答える 1

1

Productsテーブルとテーブルの間に多対多の関係がある方がよいでしょうPeriods。何かのようなもの:

Products

  • Id
  • Name
  • CategoryId
  • StatusInRent、Avialable、Not available、..。

Periods

  • Id
  • StartDate
  • EndDate

ProductPeriods

  • Id
  • ProductId
  • PeriodId
  • PeriodStatus(キャンセル、終了、...)

この設計により、クエリがはるかに簡単になります。たとえば、現在レンタルされている製品のリストと、次のようにレンタル数を取得できます。

| PRODUCTNAME | STATUSNAME | RENTCOUNT |
----------------------------------------
|        Bike |     Rented |         1 |
|         Car |     Rented |         4 |

ただし、製品ごとに、レンタル期間とこのレンタルの残りの日時を取得できます。

SQLフィドルデモ

于 2012-12-10T07:44:08.913 に答える