0

つまり、基本的にリゾートが提供する 4 つのサービスがあります。

services (Table with all resort services)
ser_id    ser_name
   1      Breakfast
   2      Dinner
   3      Towels
   4      Taxi

メンバーは、リゾートを予約する際に希望するサービスを選択できます。selected_services テーブルに適用される、対応するメンバー ケースを持つ 3 つのオプションがあります。

  1. 個別サービスを選ぶ【会員6ケース】
  2. 全サービスをまとめて選ぶ【会員様7ケース】
  3. 一度にすべてのサービスを選択してから、個々のサービスの選択を解除する [メンバー 5 ケース]

わかりやすくするために、choose_services テーブルは次のようになります。

chosen_services (Table with all member chosen resort services)
resort_id    mem_id    ser_id    chosen_type
    2           5         0          all
    2           5         1       cancelled
    2           5         2       cancelled
    2           6         4         chosen
    2           7         0          all

いずれかのサービスの価格に変更がある場合は、そのサービスを選択したメンバーを除外し、変更をメールで送信する必要があります。

私は何時間もこれに行き詰まっています。どうすればこれを機能させることができますか?

4

1 に答える 1

1

以下のコメントに基づいて改訂されました。

2 つの新しいテーブル (packages と packages_to_services) を導入できるように、サービス パッケージの概念を追加することを実際に検討することになるでしょう。

テーブルには次のフィールドがある場合があります

packages
--------

pack_id    pack_name
    1      Breakfast Package
    2      Dinner Package
    3      Towels Package
    4      Taxi Package
    5      All Services Package

packages_to_services
--------------------

pack_id     ser_id
   1           1
   2           2
   3           3
   4           4
   5           1
   5           2
   5           3
   5           4

テーブルを次のようなchosen_servicesテーブルに変更するよりもchosen_packages

resort_id    mem_id    pack_id    cancelled
    2           5         5          1
    2           5         3          0
    2           5         4          0
    2           6         4          0
    2           7         5          0

このようにすべての情報を照会します

SELECT DISTINCT cp.mem_id 
FROM chosen_packages AS cp
INNER JOIN packages_to_services AS pts
  ON cp.pack_id = pts.pack_id
WHERE cp.resort_id = 2
AND pts.ser_id = 2
AND cp.canceled = 0

ここで、アプリケーションには、メンバー 5 がサービス 1 と 2 の選択を解除したときに、パッケージ 5 をキャンセルし、パッケージ 3 と 4 を追加したことを理解するロジックが必要になることに注意してください。

また、パッケージからサービスを追加または削除する必要がある場合は、packages_to_servicesそのパッケージにサインアップしたすべてのユーザーが自動的にサービスの変更を取得するため、テーブルでレコードを挿入/削除するだけで、他のテーブルを更新する必要はありません。

于 2013-06-06T23:33:56.183 に答える