我需要制作一个界面,您可以在其中选择许多电子设备的每个硬件/ Material 部分:
在一个表中,我存储了所有设备:
:Name: :Id:
Computer 1
Laptop 2
Smartphone 3
... ...
我需要能够将不同类型的 Material 与它们相关联,我所说的 Material 是指存储不同项目的表:
:Name: :Id:
Keyboard 1
Screen 2
Mouse 3
Motherboard 4
Webcam 5
... ...
我的问题是,例如,我需要将项目键盘
与计算机
和笔记本电脑
相关联> ...
我已经成功地将项目一一关联,但由于某些设备有许多共同的项目(例如键盘),我需要能够将一项与我想要的所有设备关联。
所以我的问题很简单:如何在 MySql 数据库中存储哪个项目与哪个设备关联?
有什么提示吗?
编辑:
好吧,伙计们,看来多对多关系是最好的方法,但是有人知道我应该如何使用 sql 查询来使用第三个表吗?所以我需要存储例如
:id1: :id2:
1 2
1 3
2 4
3 1
但是是否有简单的 sql 命令可以执行此类操作,或者我是否需要使用繁重的 php 脚本才能执行此操作?
最佳答案
如果我理解的话,这是一个多对多的关系。
因此您需要另一个表来存储此关系。该表称为联结表
这张表看起来像
DeviceID | MaterialID
主键将是两列。
因此,对于同一个设备,您可以拥有许多 Material ,对于同一个 Material ,您可以拥有许多设备
Here's一篇关于它的好文章
插入您的数据。这将是 3 个基本插入。
您需要先插入设备和 Material 表。然后您在连接表中执行其他插入,因为您将在两个字段上都有外键约束。
要选择所有带有键盘的设备,您可以执行以下操作
SELECT device.name FROM device INNER JOIN junctionTableName on device.id = junctionTableName.deviceId WHERE junctionTableName.materialId = yourkeyboardid
您需要在两个表之间进行JOIN
。在下面的示例中,您知道 keyboardID
,但如果您不知道,则必须先执行子查询或查询才能选择 id,其中 name = Keyboard
.
关于php - 如何将不同的元素关联到一对多的类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12859056/