【问题标题】:PHP selecting duplicate recordsPHP选择重复记录
【发布时间】:2013-12-29 20:48:54
【问题描述】:

我有以下 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并输出其itemqty而不重复store_t

我尝试在 mysql 语句中使用GROUP BY store_t,它可以对 store_t 的重复项进行分组,但只显示一个项目和数量的记录。

这是我的代码:

$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
}

【问题讨论】:

    标签: php mysql loops html-table duplicates


    【解决方案1】:

    您是否尝试过按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>
    

    【讨论】:

      【解决方案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),我们将获得 qtyitem 的值。我们将其拆分为数组(仅用于显示目的)。

      $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
      

      等等……

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多