我在 MySQL 中有一个产品数据库,并尝试使用 PHP 查看内容。我目前正在使用 3 个表:prod、div 和 prodCatDiv。 prod 表保存每个产品的数据,而 div 表保存我公司 5 个部门的 ID。 prodCatDiv 表是一个连接表,其外键与其他两个表的 ID 相关。
我的 table 是这样设置的:
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 显示为同时属于 divID=1 和 divID=2?
我在页面上有一个表格来显示结果。在此表中,每个部门都有一些列被“选中”,以便用户可以看到每个产品属于哪个部门。目前,如果该产品属于两个部门,则它会为该产品创建两行。我希望基于 prodID 的该产品成为单行,并在其归属的两个部门列中都带有复选标记。
最佳答案
您可以聚合值并使用 DivId
列表创建单个列:
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;
关于php - 合并具有不同外键多个值的同一产品 ID 的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20432162/