我正在尝试提高 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 * color 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"
关于MySQL 和 PHP 多对多数据库关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092452/