如何将包含相同 FK ID 的所有行组织到一行中,以显示这些行中的所有项目


How do I organize all the rows that contain the same FK ID into one row that shows all the items inside those rows

我正在尝试使数据库中的所有数据由SaleID组织,这就是我现在拥有数据库的方式。SalesID 和 ProductID 是外键。

噗嗤。。。销售ID ...产品编号
....1...............1................1
....2...............1.................4
....3...............1................6
....4...............2.................3
....5...............3...........1
....6...............3.......5
....7...............4.................3
....8...............5................3
....9...............5...

.............6

我想制作一个表格来显示像这样组织的所有数据。不存储到数据库中只是为了输出此信息。

销售ID.....产品
.........1..1,4,6
.........2..3
.........3.......1,5
.........4.......3
.........5.......3,6

我试图用多维数组来做到这一点,但每次迭代它都会添加一个新行,并且显示与第一个表完全相同的东西,无法修改或添加到过去的行。

这是我现在拥有的代码

<?php 
mysql_connect('localhost','root','');
mysql_select_db('mydb');

$query="SELECT * FROM prodsales ORDER by salesID ASC";
$result = mysql_query($query);
echo "<table border='1'>";
while($row = mysql_fetch_array($result)){
echo "<tr><td>" . $row['salesID'] . "</td><td>" . $row['productID'] . "</td></tr>";
}
echo "</table>";
mysql_close();

?>
SELECT SaleID , GROUP_CONCAT( DISTINCT ProductID SEPARATOR ',' ) AS PID FROM prodsales GROUP BY SaleID

请尝试这个希望它可以帮助您获得您想要的

MySQL有一个可爱的group_concat功能,正如Abhik在评论中发布的那样。您可以像这样使用它来获取所需的不同行,并使其他匹配的行成为逗号(或其他任何内容(分隔列表:

select
    saleID,
    group_concat(productID)
from
    prodsales
group by
    saleID
order by
    saleID

这将以您想要的格式返回行,然后您可以简单地输出到表中。