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

时间:2014-12-04 11:00:52

标签: php mysql

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

TID ....... SaleID ......... ProductID
.... 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

我想创建一个表格,显示所有这样组织的数据。不存储到数据库中只是为了输出这些信息。

SaleID ........产品
......... 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();



?>

2 个答案:

答案 0 :(得分:0)

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

请尝试这个希望它可以帮助你得到你想要的东西

答案 1 :(得分:0)

MySQL有一个可爱的group_concat函数,正如Abhik在评论中发表的那样。您可以像这样使用它来获取您想要的不同行,并使其他匹配行以逗号(或其他任何其他)分隔列表:

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

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