我有2张桌子。
第一个表称为professions
,它们由ID索引。因此,每个职业现在都有一个与之相关的唯一ID。
我的第二个表名为contacts
,在那里我有一个profession
字段,现在只保存与某个专业相关联的ID。
我的问题是,如果我的联系人有多个与之相关的职业,那该怎么办呢。
查询表格以及存储联系人职业的方法最好的方法是什么。我不想做的是创建一个字段来为我拥有的每个职业存储0或1个int。原因是因为我想动态增长专业表,并且当我查询时,数字反映了我网站上的任何动态变化。
答案 0 :(得分:2)
你有多对多的关系。要在MySQL中实现它,您应该使用链接表。因此,professions
和contacts
应该在每个表中都有一个id,但是没有外键,并且您创建了一个名为profession_contact_links
的新表,或者包含自己的id,{{1} }和profession_id
,它们都是各个表的外键。然后,您可以将许多联系人与每个职业相关联,并且许多职业与每个联系人相关联。要在选择中将两个主表连接在一起,您将需要两个连接,它们将取决于您想要选择的内容。
答案 1 :(得分:2)
此建模问题的标准解决方案称为链接表。
基本上它是一个包含链接的两个表的ID的表,因此您将拥有一个包含列的链接表和一个同时包含这两列的主键:
(profession_id, contact_id)
或其他订单......并不重要,但订单会影响性能,您最常搜索的关键是您想要的关键。
然后,您可以使用SELECT ... IN (...)
或SELECT ... JOIN ...
来查询您所追踪的数据。
答案 2 :(得分:1)
根据您的需求以及您想要的方式,我建议rlike
或in
SELECT ... FROM <table> WHERE <column name> RLIKE "^id1|id2|id3$"
这将找到包含这三个术语
中的任何一个的任何单元格或使用
SELECT ... FROM <table> Where <column name> IN ('id1','id2','id3')
这将找到任何等于的单元格。