如何在MySQL中更新或插入具有多对多关系的行


How to update or insert row with many-to-many relation in MySQL

我在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;