Php 根据所选服务更新选择成员

Php 根据所选服务更新选择成员,php,mysql,arrays,Php,Mysql,Arrays,因此,度假村基本上提供四种服务: services (Table with all resort services) ser_id ser_name 1 Breakfast 2 Dinner 3 Towels 4 Taxi 会员可以在预订度假酒店时选择他们想要的服务。在所选的_服务表中,有三个选项及其适用的相应成员案例: 选择个人服务[会员6案例] 一次选择所有服务[会员7案例] 一次选择所有服务,然后取消选择单个服务[会员

因此,度假村基本上提供四种服务:

services (Table with all resort services)
ser_id    ser_name
   1      Breakfast
   2      Dinner
   3      Towels
   4      Taxi
会员可以在预订度假酒店时选择他们想要的服务。在所选的_服务表中,有三个选项及其适用的相应成员案例:

  • 选择个人服务[会员6案例]
  • 一次选择所有服务[会员7案例]
  • 一次选择所有服务,然后取消选择单个服务[会员5案例]
  • 为了让事情更清楚,以下是所选的_服务表的外观:

    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
    
    如果任何服务的价格发生变化,我们需要将选择该服务的成员拉出来,并通过电子邮件向他们发送更改


    这件事我已经讨论了好几个小时了,我们怎么才能让它工作呢?

    根据您的评论修改如下:

    我可能会考虑添加服务包的概念,这样您就可以引入两个新的表(包和PACKAGESTOTI服务)

    这些表可能有以下字段

    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
    
    您不希望将
    选择的\u服务
    表更改为
    选择的\u包
    表,如下所示

    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
    
    您可以查询所有这些信息

    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


    此外,如果您需要从包中添加或删除服务,只需在
    包到\u服务
    表上插入/删除一条记录,无需更新任何其他表,因为所有注册该包的用户都会自动接收服务更改。

    Mike,感谢您的快速响应。我唯一的问题是,如果为度假村添加了一项新服务,并且“all”是为会员选择的类型,他们应该自动获得它。所以“所有”=(当前+未来)服务。你对未来的部分有什么看法?(我更倾向于您的第一个解决方案,但需要知道未来部分将如何工作)@Maverick OK,因此您似乎必须了解服务包的概念。在这种情况下,我将创建另一个完全匹配各个服务和包(可能包括1个或多个服务)的附加表。您需要在应用程序级别具有逻辑,才能知道如何在选择全部然后取消单个包的情况下拆分服务包。@Maverick有关使用包概念的更多建议,请参阅更新的答案。包的更改让我感到困惑。让我花几分钟时间试着理解一下。