0

我有 2 张桌子。

第一个表称为professions,并按 ID 索引。所以现在每个职业都有一个与之关联的唯一 ID。

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

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

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

4

3 回答 3

2

你有一个多对多的关系。要在 MySQL 中实现这一点,您应该使用链接表。所以professionsandcontacts应该在每个表中都有一个 id,但没有外键,然后您创建一个名为profession_contact_linksor 的新表,包含它自己的 id 和profession_idand contact_id,它们都是各个表的外键。然后你可以有许多联系人与每个职业相关联,并且许多职业与每个联系人相关联。要在一个选择中将两个主表连接在一起,您将需要两个连接,它们是什么将取决于您要选择的确切内容。

于 2012-09-14T22:20:42.960 回答
2

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

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

(profession_id, contact_id)

或其他顺序......没那么重要,但顺序会影响性能,您最常搜索的关键是您首先想要的。

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

于 2012-09-14T22:23:07.937 回答
1

根据你想要什么以及你想如何找到它,我建议rlikein

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

这将找到包含这三个术语中的任何一个的任何单元格

或使用

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

这将找到等于这三个之一的任何单元格。

于 2012-09-14T22:25:08.770 回答