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
会员可以在预订度假酒店时选择他们想要的服务。在所选的_服务表中,有三个选项及其适用的相应成员案例:
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有关使用包概念的更多建议,请参阅更新的答案。包的更改让我感到困惑。让我花几分钟时间试着理解一下。