如何将不同的元素关联到一个到多个类别?

时间:2012-10-12 12:26:33

标签: php mysql sql

我需要创建一个界面,您可以在其中选择许多电子设备的每个硬件/材料部分:

在表格中我存储了所有设备:

 :Name:     :Id:
Computer     1
Laptop       2
Smartphone   3
...         ...

我需要能够将不同类型的物资与它们联系起来,物质我的意思是这个表中存储了不同的物品:

 :Name:         :Id:
Keyboard         1
Screen           2
Mouse            3
Motherboard      4
Webcam           5
...             ...

我的问题是,例如,我需要将项目Keyboardcomputerlaptop相关联...

我已经成功地将项目逐个关联,但由于某些设备共有许多项目(如键盘),我需要能够将一个项目与我想要的所有设备相关联。

所以我的问题很简单:如何在MySql数据库中存储哪个项目与哪个设备相关联?

那里有任何暗示吗?

编辑:

好的伙计们,所以似乎多对多关系是最好的方法,但是有人提示我应该如何使用sql查询来使用第三个表?所以我需要存储例如

:id1:        :id2:
  1            2
  1            3
  2            4
  3            1

但是有没有简单的sql命令来做这些事情,还是我需要使用繁重的php脚本才能做到这一点?

3 个答案:

答案 0 :(得分:2)

如果我理解,这是一个多对多的关系。

所以你需要另一个关于这种关系的表。该表称为联结表

此表格看起来像

DeviceID   |     MaterialID

主键将是两列。

因此,对于相同的设备,您可以拥有许多材料,对于相同的材料,您可以拥有许多设备

Here's一篇关于它的好文章

插入您的数据。这将是3个基本插入。

您需要先在设备和材料表中插入。然后在联结表中执行另一个插入,因为您将在两个字段上都有外键约束。

要选择所有带键盘的设备,您可以执行以下操作

SELECT device.name FROM device INNER JOIN junctionTableName on device.id = junctionTableName.deviceId WHERE junctionTableName.materialId = yourkeyboardid

在两个表之间需要JOIN。以下是您知道keyboardID的示例,但如果您不知道,则必须先执行子查询或查询,然后选择name = keyboard中的ID。

答案 1 :(得分:1)

您需要一张表来表达这种M:N关系。

与'device_material'表一样,包含colums:device_id和material_id

答案 2 :(得分:-1)

您可以在第二个表格中使用第三列

id      item        associate
-----------------------------
1       keyboard    laptop
2       keyboard    computer
3       mouse       computer
4       webcam      laptop
5       webcam      computer

然后像:

select * from devices_table d join accessory_table a on a.associate = d.name where foo = 'bar'