0

我正在尝试提高我对 SQL 查询的了解,但我陷入了多对多关系查询。

使用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

任何帮助都会很棒。太感谢了。

4

1 回答 1

2

你当然可以写一个查询来做到这一点。您基本上需要将表连接在一起,以便将所需的数据从表链接到表,然后为所需条件添加 where 子句。

您的颜色通过属性“链接”到您的product_coloursviacolour_id属性,产品颜色通过两个表格product_group_names上的属性链接到 viaproduct_id属性,并且您的组名通过表格上的group_name_idgroup_id属性链接group_names

但是,当您进行这种查询时,如果这些表中有很多记录 - 查询可能会非常慢。您需要确保在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"
于 2013-04-18T20:39:05.570 回答