查询具有多个可能匹配值的字段的最快方法

时间:2012-09-14 22:16:36

标签: mysql

我有2张桌子。

第一个表称为professions,它们由ID索引。因此,每个职业现在都有一个与之相关的唯一ID。

我的第二个表名为contacts,在那里我有一个profession字段,现在只保存与某个专业相关联的ID。

我的问题是,如果我的联系人有多个与之相关的职业,那该怎么办呢。

查询表格以及存储联系人职业的方法最好的方法是什么。我不想做的是创建一个字段来为我拥有的每个职业存储0或1个int。原因是因为我想动态增长专业表,并且当我查询时,数字反映了我网站上的任何动态变化。

3 个答案:

答案 0 :(得分:2)

你有多对多的关系。要在MySQL中实现它,您应该使用链接表。因此,professionscontacts应该在每个表中都有一个id,但是没有外键,并且您创建了一个名为profession_contact_links的新表,或者包含自己的id,{{1} }和profession_id,它们都是各个表的外键。然后,您可以将许多联系人与每个职业相关联,并且许多职业与每个联系人相关联。要在选择中将两个主表连接在一起,您将需要两个连接,它们将取决于您想要选择的内容。

答案 1 :(得分:2)

此建模问题的标准解决方案称为链接表。

基本上它是一个包含链接的两个表的ID的表,因此您将拥有一个包含列的链接表和一个同时包含这两列的主键:

(profession_id, contact_id)

或其他订单......并不重要,但订单会影响性能,您最常搜索的关键是您想要的关键。

然后,您可以使用SELECT ... IN (...)SELECT ... JOIN ...来查询您所追踪的数据。

答案 2 :(得分:1)

根据您的需求以及您想要的方式,我建议rlikein

SELECT ... FROM <table> WHERE <column name> RLIKE "^id1|id2|id3$"

这将找到包含这三个术语

中的任何一个的任何单元格

或使用

SELECT ... FROM <table> Where <column name> IN ('id1','id2','id3')

这将找到任何等于的单元格。