我继承,其中一人表有一个称为authorised_areas领域的数据库。前端允许用户从选取列表中选择多个条目(使用区域表的描述字段中的值填充),然后将authorised_areas的值设置为以逗号分隔的列表。我正在将它迁移到MySQL数据库,而我在这里时,我想通过从person表中删除authorised_areas字段并创建一个多对多表person_area来提高数据库的完整性, - 区键。有几百个人的记录,所以我想找到一种方法来有效地使用几个MySQL语句,而不是单独的插入或更新语句来做到这一点。如何列表字段转换成许多一对多表在MySQL
只是为了澄清,目前的结构是一样的东西:
person
id name authorised_areas
1 Joe room12, room153, 2nd floor office
2 Anna room12, room17
area
id description
1 room12
2 room17
3 room153
4 2nd floor office
...但我想的是:
person
id name
1 Joe
2 Anna
area
id description
1 room12
2 room17
3 room153
4 2nd floor office
person_area
person_id area_id
1 1
1 3
1 4
2 1
2 2
有一个在人的区域ID没有引用表(和列表中的一些文本值与区域表中的描述不完全相同),所以这需要通过文本或模式匹配来完成。如果我写一些php代码来分割字符串,找到匹配并在多对多表中插入适当的值,我会更好吗?
我会感到惊讶,如果我是第一人,要做到这一点,但谷歌搜索没有露面任何有用的东西(也许我没有使用适当的搜索词?)如果有人可以提供一些建议有效地做到这一点,我非常感谢。