我有以下mysql表:
id store_t item qty
1 M5 xx 2
2 M5 xy 4
3 M8 ze 10
4 M5 zz 1
我希望表格输出如下:
M5
xx 2
xy 4
zz 1
M8
ze 10
我要找的是找到一种方法来分组并选择重复的store_t
并输出其item
和qty
,而不重复store_t
。
我尝试在mysql语句中使用GROUP BY store_t
,它可以对store_t的Duplicates进行分组,但只显示item和qty的一条记录。
这是我的代码:
$query = "SELECT * from transfer_check GROUP BY store_t";
$result = mysql_query($query);
if(mysql_num_rows($result)>0){
$num = mysql_num_rows($result);
for($i=0;$i<$num;$i++){
$row = mysql_fetch_assoc($result);
//Table Created for each Store
echo "<table width=80% align=center border=2 cellpadding=3 cellspacing=0>";
echo "<tr><td align=center colspan=2>".$row['store_t']."</td></tr>";
echo "<tr><td align=center bgcolor=white><b>Item No.</b></td><td align=center
bgcolor=lightgreen><b>QTY Transferred</b></td></tr>";
echo "<tr><td align=center><b>".strtoupper($row['item_no'])."</b></td><td align=center> <b>".$row['qty']."</b></td></tr>";
echo "</table>";
//End of i loop
}
答案 0 :(得分:2)
您是否尝试按store_t
排序结果然后循环显示结果?
类似的东西:
<?php
$query = "SELECT * from transfer_check ORDER BY store_t";
$result = mysql_query($query);
?><table><?php
while ( $row = mysql_fetch_assoc($query) ) {
?><tr><?php
if ( !isset($curStore) || $curStore != $row['store_t'] ) {
$curStore = $row['store_t'];
echo "<td colspan='2'>$curStore</td></tr><tr>";
}
echo "<td>{$row['item']}</td><td>{$row['qty']}</td>";
?></tr>
}?>
</table>
答案 1 :(得分:2)
您可以使用GROUP_CONCAT对sql中的值进行分组,然后在PHP循环中解析结果。
首先,这里是sql fiddle,其中包含所需的结果。
SELECT DISTINCT
store_t, GROUP_CONCAT(DISTINCT item ORDER BY item) as items_list,
GROUP_CONCAT(DISTINCT qty ORDER BY qty) as qty
FROM myTable
GROUP BY store_t
结果将是:
STORE_T ITEMS_LIST QTY
M5 xx,xy,zz 1,2,4
M8 ze 10
现在我们需要循环通过此结果来创建您想要的结构,对于每一行(store_t),我们将获得qty
和item
的值。我们将它拆分为数组(仅用于显示目的)。
$result = mysql_query($sql) or die('A error occured: ' . mysql_error());
while ($record = mssql_fetch_array($result)) {
$items_array = explode(",",$record['items_list']);
$qty_array = explode(",",$record['qty']);
echo $record['store_t'] . ": <br/>";
for ($i=0; $i<sizeof($items_array); $i++) {
echo "Item:" . $items_array[$i] . " QTY: " . $qty_array[$i];
}
}
输出将是:
M5
Item: xx QTY: 1
Item: xy QTY: 2
等...