繁体   English   中英

MySQL和PHP多对多数据库关系

[英]MySQL and PHP Many-to-Many Database Relationships

我正在努力提高我对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

任何帮助都会很棒。 非常感谢。

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

你的颜色“链接”到你的product_colours通过colour_id属性,产品的颜色都链接到product_group_names通过product_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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM