组合具有多个不同外键值的相同产品ID的多个实例?

时间:2013-12-06 19:37:46

标签: php mysql sql

我在MySQL中有一个产品数据库,我正在尝试用PHP查看内容。我目前正在使用3个表:prod,div和prodCatDiv。 prod表保存每个产品的数据,而div表保存我公司的5个部门的ID。 prodCatDiv表是一个连接表,其外键与其他两个表的ID相关。

我的表格设置如下:

prod
-
prodID | prodName | prodImg | prodDesc

div
-
divID | divName

prodCatDiv
-
prodID | catID | divID

我的SQL语句如下:

"SELECT * FROM prod LEFT JOIN prodCatDiv ON prod.prodID=prodCatDiv.prodID ORDER BY prodUpdate DESC";

但是,当我尝试使用这些表中的数据填充页面时,我会从同一个prodID获取多个列表。因此,如果我将prodID = 1归因于divID = 1和divID = 2,则它会在每个列表的第一个和第二个分区中列出该产品两次。我如何组合这两个列表,以便它显示一个prodID = 1归因于BOTH divID = 1 AND divID = 2?

我在页面上有一个表格来显示结果。在此表中,每个部门的列都有“选中标记”,以便用户可以查看每个产品所在的部门。目前,如果该产品位于两个部门中,则会为产品创建两行。我希望这个基于prodID的产品是一行,并且在两个分区列中都有一个复选标记。

1 个答案:

答案 0 :(得分:0)

您可以聚合这些值并使用DivId s:

列表创建一个列
SELECT p.*, group_concat(pcd.DivId separator ', ') as DivIds
FROM prod p LEFT JOIN
     prodCatDiv pcd
     ON p.prodID = pcd.prodID
GROUP BY p.ProdId
ORDER BY prodUpdate DESC;