2012-10-12 56 views
2

我需要做的,你可以選擇許多電子設備的每個硬件/物資部分的接口:如何將不同的元素關聯到一個到多個類別?

在表我存儲的所有設備:

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

我需要能夠通過物資別樣與之物資關聯,我的意思是這個表,其中存儲有不同的項目:

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

我的問題是,例如,我需要ŧ Ø既computerlaptop ...該項目Keyboard關聯

我已經成功地一一關聯的項目,但因爲有些設備在共同有許多物品(如鍵盤),我需要能夠給一個項目關聯到我想要的所有設備。

所以我的問題很簡單:我如何存儲哪個項目與MySql數據庫中的哪個設備相關聯?

有沒有提示?

編輯:

好球員,所以它似乎多到許多關係是做到這一點的最好辦法,但任何人都上了車,我應該如何使用SQL查詢來使用第三個表中的一些暗示?所以我需要存儲例如

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

但有簡單的SQL命令做這種事情還是需要在爲了做到這一點並用重PHP腳本?

+1

你確定這不是一個多對多? – Marc

+1

Vafliik的回答是正確的,但對於進一步的信息,我會極力鼓勵你研究[數據庫規範化](http://en.wikipedia.org/wiki/Database_normalization)。 – megaflop

+1

根據您的編輯:[檢查此資源](http://return-true.com/2011/02/mysql-many-to-many-relationships/)。 – jdstankosky

回答

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,但如果你不知道它,你將不得不做一個子查詢或查詢之前選擇的ID在name = keyboard

+0

這很好!你能向我解釋一下,我如何選擇,例如,所有的設備都有鍵盤?它真的會幫助我! – Weacked

+1

1秒,我會編輯我的回答 – Marc

+1

非常感謝你:)! – Weacked

1

您將需要一張表來表達這種M:N關係。

像 'device_material' 表,包含colums:DEVICE_ID和material_id

-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'

+0

這是我第一次做,但我會有4578鍵盤項目,這就是我想要避免... – Weacked

+0

@ weacked我更新了我的答案,以便如何插入 – Marc

相關問題