2

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

在一张表中,我存储了所有设备:

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

我需要能够将不同种类的材料与它们相关联,材料是指存储不同物品的这张表:

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

我的问题是,例如,我需要将项目Keyboard与两个computerAND laptop...

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

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

有什么提示吗?

编辑 :

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

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

但是是否有简单的 sql 命令来执行此类操作,或者我需要使用繁重的 php 脚本来执行此操作吗?

4

3 回答 3

2

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

所以你需要另一个表来处理这个关系。此表称为联结表

这张桌子看起来像

DeviceID   |     MaterialID

主键将是两列。

所以对于同一个设备,你可以有很多材料,对于同样的材料,你可以有很多设备

这是一篇关于它的好文章

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

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

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

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

你需要JOIN在两张桌子之间。这是一个您知道的示例,keyboardID但如果您不知道,则必须先执行子查询或查询才能选择 id where name = keyboard

于 2012-10-12T12:31:29.867 回答
1

您将需要一个表格来表达这种 M:N 关系。

像 'device_material' 表,包含列:device_id 和 material_id

于 2012-10-12T12:30:05.990 回答
-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'

于 2012-10-12T12:43:17.917 回答