从MySQL分组显示数据

时间:2014-03-11 00:19:54

标签: php mysql sql database

我有一张这样的表:

     Boxes     Items         Weight (kgs)
   ==================================
     101        CHICKEN       2 
     102        CHICKEN       3 
     104        CHICKEN       4 
     105        BEEF          3 

在MySQL和PHP中,是否有可能以HTML格式的以下格式显示这些数据?

Boxes                 Items
=====================================
101-104               9kgs of CHICKEN
105                   3kgs of BEEF

感谢。

5 个答案:

答案 0 :(得分:2)

SELECT CASE COUNT(*)
        WHEN 1 THEN boxes
        ELSE CONCAT(MIN(boxes), '-', MAX(BOXES))
       END AS Boxes,
       CONCAT(SUM(Weight), 'kgs of ', items) AS Items
FROM yourTable
GROUP BY Items

答案 1 :(得分:0)

SELECT min(boxes),max(boxes),items,sum(weight) GROUP BY items

但是你有一些问题,你的表似乎包含文本而不是数字,你需要修复它,所以像MIN,MAX,SUM,AVG这样的功能。其次,您的箱号是(或可能是)非连续的,因此您可能希望单独处理。这个逻辑有点复杂。例如。如果你的鸡200和203以及牛肉201和204,以及202,205猪肉,如果它说200-203是鸡肉,那么它是错的。如果你有很多盒子,那么列表就会很大。这是用户界面设计的一半。

祝你好运。

答案 2 :(得分:0)

    $query = " select group_concat(Boxes) as box,sum(weight) as weight , item 
             From your_table
             group by item";

 $result = $mysqli->query($query);

 echo "<table>
         <thead> 
          <th>Boxes</th>
          <th>Items</th>
        </thead>";
 while($row = $result->fetch_array())
 {
       echo "<tr>";
          echo "<td>".$row["box"]."</td>";
          echo "<td>".$row["weight"]." kg  of ".$row["item"]."</td>";
       echo "</tr>"; 
 }
   echo "</table>";

重量字段应为数字

答案 3 :(得分:0)

SELECT GROUP_CONCAT(Boxes), Item, SUM(Weight)
FROM Inventory
GROUP BY Item

会给你:

Boxes          Items     Weight
=====================================
101,102,104    CHICKEN   9
105            BEEF      3

答案 4 :(得分:0)

select concat(min(boxes), '-', max(boxes)) as boxes,
       concat(sum(weight), 'kgs of ', items) as items
  from tbl
 group by items

SQL小提琴:http://sqlfiddle.com/#!2/07850/4/0