我在office_service表中有 3 个表办公室、服务和它们之间的关系。下面是一个表格示例:
Offices
+----+---------+
| id | street |
+----+---------+
Services
+----+---------+
| id |service |
+----+---------+
Office_Service
+----+-----------+------------+
| id | id_office | id_service |
+----+-----------+------------+
我有没有服务的办公室,以及改变一项或多项服务的办公室。
在办公室页面上,我显示有关它的信息,并<select multiple>
所有服务的标签。如果我的查询"从office_service中选择id_service WHERE id_office = $office_id",则返回我标记为"已选择"的内容 适当的<option>
如果办公室更换服务,或者没有服务的办公室会得到它,我不知道该怎么办。如何使用MySQL实现这一点,或者我需要在办公室的更新/插入操作之前检查office_service表?
更新:当用户单击保存按钮时,如何找出要执行的操作 - 插入,删除或不对Office_Service表中的行执行任何操作?
如果目的是显示所有服务的列表,以及给定办公室提供哪些服务。假设(id_service,id_office)元组在office_service
中是唯一的,那么像这样:
SELECT s.id
, s.service
, os.id_service IS NOT NULL AS `service_exists_for_this_office`
FROM services s
LEFT
JOIN office_service os
ON os.id_service = s.id
WHERE os.id_office = '42'
如果 office_service
中有匹配的行,则选择列表中的第三个表达式将返回一个1
,如果该行不存在,则返回一个0
。
要向办公室添加服务,
INSERT INTO office_service (id_office, id_service) VALUES (42, 7);
要从办公室中删除该服务,请执行以下操作:
DELETE FROM office_service WHERE id_office = 42 and id_service = 7;