[英]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_id
和group_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.