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

标签 php mysql sql

我需要制作一个界面,您可以在其中选择许多电子设备的每个硬件/ 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/

相关文章:

php - 无法将 laravel 7 升级到 laravel 8

mysql - 如果一个小工具是由参数组合标识的,我应该在数据库中的任何地方都包含所有参数还是只包含一次?

php - MySQL语法错误

mysql - SQL:从表中获取日期

JavaFX 地址簿使用相同信息更新联系人 (SQL)

php - 使用 DataMapper ORM for php 映射字段名称

php - 使用 JavaScript 去除斜线?可能的

mysql - 将 URL 编码的文本存储在数据库中是个好主意吗?

sql - 如何使用 PostGIS 将多边形数据转换为线段

PHPUnit 代码覆盖率报告 foreach 内的误报