2

多くの電子機器の各ハードウェア/材料部分を選択できるインターフェイスを作成する必要があります。

テーブルにすべてのデバイスを保存しています:

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

さまざまな種類の物資をそれらに関連付けることができるようにする必要があります。物資とは、さまざまなアイテムが保存されているこのテーブルを意味します。

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

私の問題は、たとえば、アイテムをAND ...のKeyboard両方に関連付ける必要があることです。computerlaptop

すでに項目を 1 つずつ関連付けることに成功していますが、一部のデバイスには多くの共通項目 (キーボードなど) があるため、1 つの項目を必要なすべてのデバイスに関連付けることができる必要があります。

だから私の質問は簡単です:どのアイテムがどのデバイスに関連付けられているかをMySqlデータベースに保存するにはどうすればよいですか?

ヒントはありますか?

編集 :

さて、多対多の関係がこれを行うための最良の方法のようですが、SQLクエリを使用して3番目のテーブルを使用する方法についてヒントを得た人はいますか? だから私は例えば保存する必要があります

: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

JOIN2 つのテーブルの間に が必要です。を知っている例を次に示しますが、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

2番目のテーブルで3番目の列を使用できます

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 に答える