MySQL 和 PHP 多对多数据库关系

标签 mysql sql

我正在尝试提高 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/

相关文章:

sql - 可以在 SQL WHERE 子句中使用 "on-the-fly"列名吗?

mysql - 尝试执行查询时 SQL 语法错误

mysql - 显示三个表的所有记录,即使第一个表中的记录不在第二个或第三个表中

mysql - 找不到 DBI.pm,即使它在路径中

MySQL一对多映射查询-如果匹配很多,不返回一个

php - 读入一个文本文件,按异常字符分割,逐行处理 "line"

mysql从每组中获取最后10条记录

mysql - 如何在 mysql 中将值逐行求和?

mysql - 一对多与多对多关联设计和优势

sql - 相同的 Row_Number 具有相同的值