我需要创建一个界面,您可以在其中选择许多电子设备的每个硬件/材料部分:
在表格中我存储了所有设备:
:Name: :Id:
Computer 1
Laptop 2
Smartphone 3
... ...
我需要能够将不同类型的物资与它们联系起来,物质我的意思是这个表中存储了不同的物品:
:Name: :Id:
Keyboard 1
Screen 2
Mouse 3
Motherboard 4
Webcam 5
... ...
我的问题是,例如,我需要将项目Keyboard
与computer
和laptop
相关联...
我已经成功地将项目逐个关联,但由于某些设备共有许多项目(如键盘),我需要能够将一个项目与我想要的所有设备相关联。
所以我的问题很简单:如何在MySql数据库中存储哪个项目与哪个设备相关联?
那里有任何暗示吗?
编辑:
好的伙计们,所以似乎多对多关系是最好的方法,但是有人提示我应该如何使用sql查询来使用第三个表?所以我需要存储例如
:id1: :id2:
1 2
1 3
2 4
3 1
但是有没有简单的sql命令来做这些事情,还是我需要使用繁重的php脚本才能做到这一点?
答案 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'