Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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_Join_Concat - Fatal编程技术网

在MySQL中连接多个表和合并数据

在MySQL中连接多个表和合并数据,mysql,join,concat,Mysql,Join,Concat,我有四个表要连接在一起,但有一个表要对两个特定记录进行分组 Product_to_category PC P_ID C_ID 1 1 2 2 2 3 1 3 Product P P_ID P_PRICE 1 12 2 3 3 4 Product_Description PD P_ID Language_id PD_Name 1 1 Chips 1 2 Chips (In

我有四个表要连接在一起,但有一个表要对两个特定记录进行分组

Product_to_category PC P_ID C_ID 1 1 2 2 2 3 1 3 Product P P_ID P_PRICE 1 12 2 3 3 4 Product_Description PD P_ID Language_id PD_Name 1 1 Chips 1 2 Chips (In a different language) 2 1 Soda 2 2 Soda (In a different language) Category Description CD C_ID Language_id CD_Name 1 1 Junk Food 1 2 Junk Food (In a different language) 2 1 Drinks 2 2 Drinks (In a different language) 3 1 Imported 3 2 Imported (In a different language) Product_attribute PA P_ID A_ID Language_ID A_TEXT 1 1 1 Brand A 1 2 1 300g 1 3 1 Ketchup 1 1 2 Brand A 1 2 2 300g 1 3 2 Ketchup (Different language) 2 1 1 Brand B 2 2 1 500mL 2 3 1 Cherry 2 1 2 Brand B 2 2 2 500mL 2 3 2 Cherry (Different language) 基本上,我正在尝试加载带有类别和属性的产品。只需左键连接表而不使用Product_属性PA就可以了。我不知道如何将属性组合在一起。下面是我的代码:

select P.P_ID, P.P_PRICE, PD.LANGUAGE_ID, PD.PD_Name, CD.C_ID, CD.CD_NAME, 
(select group_concat(PA.A_TEXT) from PA where (PA.A_ID=1 or PA.A_ID=2) and PA.P_ID =
P.P_ID group by PA.P_ID) as attribute from PC left join PD on PC.P_ID = PD.P_ID
left join CD on PC.C_ID = CD.C_ID
left join P on P.P_ID = PC.P_ID
where PD.language_id = CD.language_id and (PD.language_id=1 or PD.language_id=2)
如果这有点让人困惑,我很抱歉

2013年4月26日更新
这里总结了表格中的内容以及我想要完成的内容:Product_to_category PC表格将产品链接到其类别,将类别链接到其产品。一个产品可以属于多个类别,一个类别可以属于多个产品。P表中的产品有其产品值,如价格,其描述在产品描述PD表中。一个产品可以有两行产品描述(双语)。产品在产品属性PA表中也有属性值,如品牌(“品牌A”、“品牌B”)和体积/重量(“300g”、“500ml”)。一个产品可以属于多个类别,一个类别可以有多个产品。每个类别有两个描述(双语)。我想用正确的语言显示每个产品及其多个类别,并连接属性文本

如果需要进一步解释,请告诉我

select P.P_ID, P.P_PRICE, PD.LANGUAGE_ID, PD.PD_Name, CD.C_ID, CD.CD_NAME, 
group_concat(DISTINCT PA.A_TEXT) as attribute
from PC left join PD on PC.P_ID = PD.P_ID
left join CD on PC.C_ID = CD.C_ID
left join P on P.P_ID = PC.P_ID
left join PA on PA.P_ID = P.P_ID AND (PA.A_ID=1 or PA.A_ID=2)
where PD.language_id = CD.language_id and (PD.language_id=1 or PD.language_id=2)
GROUP BY P.P_ID, PD.LANGUAGE_ID

GROUP\u CONCAT应该在您的主SELECT子句中,而不是在子查询中。+1-我正在创建自己的SQL FIDLE,就在我来这里发布查询时,您击败了我。谢谢老兄!太快了!我挣扎了好几个小时!对不起,巴玛。结果不是我预期的。PC中的记录数为6127条。当我将PC和CD连接在一起检索数据时,将有12000多条记录,当我将PC和CD连接在一起检索数据时,将有11500多条记录。它超过实际记录数的原因是每个CD和PD可以有两种语言。我拉的查询只提供1000多条记录。如果我解释得不好,请告诉我。谢谢你的帮助!不,你不是。小提琴的预期结果和实际结果有什么不同?我认为你问题中的预期结果是错误的。对于语言2中的芯片,CD_名称应该是“垃圾食品(另一种语言)”,而不是“垃圾食品”。听起来您只需要将C_ID添加到GROUPBY子句中。
select P.P_ID, P.P_PRICE, PD.LANGUAGE_ID, PD.PD_Name, CD.C_ID, CD.CD_NAME, 
group_concat(DISTINCT PA.A_TEXT) as attribute
from PC left join PD on PC.P_ID = PD.P_ID
left join CD on PC.C_ID = CD.C_ID
left join P on P.P_ID = PC.P_ID
left join PA on PA.P_ID = P.P_ID AND (PA.A_ID=1 or PA.A_ID=2)
where PD.language_id = CD.language_id and (PD.language_id=1 or PD.language_id=2)
GROUP BY P.P_ID, PD.LANGUAGE_ID