0

所以基本上度假村提供四种服务:

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

会员可以在向度假村预订时选择他们想要的服务。在 selected_services 表中有三个选项及其适用的相应成员案例:

  1. 选择个人服务【会员6例】
  2. 一次选择所有服务【会员7例】
  3. 一次选择所有服务,然后取消选择单个服务[成员 5 案例]

为了让事情更清楚,这里是 selected_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

根据您的评论修改如下:

我可能实际上会考虑添加服务包的概念,因此您可能会引入两个新表(包和 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 回答