Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多对多mysql查询_Mysql_Sql - Fatal编程技术网

多对多mysql查询

多对多mysql查询,mysql,sql,Mysql,Sql,我正在尝试创建一个结构化的数据库,这样我就可以进行一次查询并获得所需的所有数据 这就是我现在的结构: Products Subcategory Category ------------- ------------- ------------- | id | name | | id | name | | id | name | 对我来说,创建两个关系表将产品与子类别以及子类别与类别(使其具有层次结构)联系起来是有意义的: 因此,产品可以分为多个子类别,子类别告诉我们产

我正在尝试创建一个结构化的数据库,这样我就可以进行一次查询并获得所需的所有数据

这就是我现在的结构:

Products       Subcategory    Category
-------------  -------------  -------------
| id | name |  | id | name |  | id | name |
对我来说,创建两个关系表将产品与子类别以及子类别与类别(使其具有层次结构)联系起来是有意义的:

因此,产品可以分为多个子类别,子类别告诉我们产品属于哪个类别

使用这种结构,如果我想找到所有具有
类别id
的产品,我必须查询
sub\u cat\u关系
表,然后获取该数组并对
prod\u sub\u关系
表进行另一次查询(这太混乱了)

我的目标是用一个id查找所有产品、所有类别或所有子类别(无论是
产品id
类别id
、还是
子类别id


这可能吗?或者我在这里做错了什么?

将每个产品的类别放入一个数组中,序列化数组,并将其存储在数据库中…

正如@har07已经提到的,您可以在这个数组中使用一个简单的
连接
。
我不太清楚你们桌子结构的其他细节,但是
我将根据您目前提供的内容向您展示:

SELECT p.ID, p.Name, c.Name as CategoryName, s.Name as SubCategoryName
FROM Products P
INNER JOIN SubCategory S
ON P.subcat_id = S.subcat_id
INNER JOIN Category C
ON S.cat_id = C.cat_id
然后可以使用
WHERE
子句指定要显示的产品及其类别和子类别

SELECT P.ID, P.Name, C.Name as CategoryName, S.Name as SubCategoryName
FROM Products P
INNER JOIN SubCategory S
ON P.subcat_id = S.subcat_id
INNER JOIN Category C
ON S.cat_id = C.cat_id
WHERE P.ID = valuehereforyourID
要获取给定
类别ID的
产品
子类别
,只需更改
WHERE
子句,如:

WHERE C.cat_id = ValueForCategoryIDhere
WHERE S.subcat_id = ValueForSubCategoryIDhere
要获取给定
子类别ID的
产品
类别
,只需更改
WHERE
子句,如:

WHERE C.cat_id = ValueForCategoryIDhere
WHERE S.subcat_id = ValueForSubCategoryIDhere

您应该检查sql中的“JOIN”操作。使用join,可以使这3个表像一个表一样连接起来,其中包含3个表中的所有列。因此,您可以通过一个查询从3个表中获取所需的所有数据。也许是可以帮助你开始学习-我是新来的-有没有关于我目前的结构的例子。如果我有分类ID呢?我如何加入表格以获得所有子类别或所有产品?很高兴@tonylefler为您提供帮助。上帝保佑,快乐编码!