2013-04-18 35 views
0

我試圖提高我對SQL查詢的知識,但在多對多關係查詢中遇到困難。MySQL和PHP多對多數據庫關係

使用PHP和MySQL數據庫結構如下:

數據庫結構:

-------------------------------------------- 
|     colour     | 
-------------------------------------------- 
| colour_id   |  colour   | 
-------------------------------------------- 
| 1     |  blue   | 
-------------------------------------------- 
| 2     |  red    | 
-------------------------------------------- 
############################################ 
-------------------------------------------- 

----------------------------------------------------------------- 
| product_colours            | 
----------------------------------------------------------------- 
| id   |  product_id  | colour_id   | 
----------------------------------------------------------------- 
| 1    |   1   |   2    | 
----------------------------------------------------------------- 
| 2    |   2   |   1    | 
----------------------------------------------------------------- 
################################################################# 
----------------------------------------------------------------- 

主表

----------------------------------------------------------------- 
| products             | 
----------------------------------------------------------------- 
| id   |  name    |  details   | 
----------------------------------------------------------------- 
| 1   |  product 1   |  blah    | 
----------------------------------------------------------------- 
| 2   |  product 2   |  blah    | 
----------------------------------------------------------------- 
################################################################# 
----------------------------------------------------------------- 


----------------------------------------------------------------- 
| product_group_names          | 
----------------------------------------------------------------- 
| id   |  product_id   | group_name_id | 
----------------------------------------------------------------- 
| 1    |   1    |   1   | 
----------------------------------------------------------------- 
| 2    |   2    |   2   | 
----------------------------------------------------------------- 
################################################################# 
----------------------------------------------------------------- 


-------------------------------------------- 
|  group_name      | 
-------------------------------------------- 
| group_name_id  |  group_name  | 
-------------------------------------------- 
| 1     | product_group_1  | 
-------------------------------------------- 
| 2     | product_group_2  | 
-------------------------------------------- 
############################################ 
-------------------------------------------- 

我可以寫一個查詢中使用加入其中說:SELECT * colours WHERE group_name = product_group_1

任何幫助將是驚人的。非常感謝。

+1

是的,你可以寫這樣一個查詢 - 你到目前爲止嘗試過什麼? –

回答

2

你當然可以寫一個查詢來做到這一點。您需要基本上將表連接在一起,以便您可以將所需的數據從表格鏈接到表格,然後爲所需條件添加where子句。

你的顏色是通過colour_id屬性「鏈接」到你的product_colours,產品顏色通過product_id屬性鏈接到product_group_names這兩個表,和您的組名是通過在group_namesgroup_name_idgroup_id屬性鏈接。

當你這樣做,雖然這種類型的查詢,如果你有很多的這些表中的記錄 - 查詢可以走的很慢。您需要確保在JOIN...ON條款以及WHERE條款中引用的每個列中添加索引。

SELECT colour FROM colours c 
JOIN product_colours pc ON c.id = pc.colour_id 
JOIN product_group_names pgn ON pgn.product_id = pc.product_id 
JOIN group_name gn ON gn.id = pgn.group_name_id 
WHERE gn.group_name = "product_group_1"