Php 如何对msql表中的不同值执行摘要

Php 如何对msql表中的不同值执行摘要,php,mysql,database,Php,Mysql,Database,这个表来自mysql,我使用以下代码输出 <?php $sql="SELECT * FROM $tbl_name WHERE subunit='$subunit' and part='$part' and session='$session' and class ='$class' order by names asc"; $result=mysql_query($sql); while($data = mysql_fetch_row($result)){ echo strtoup

这个表来自mysql,我使用以下代码输出

<?php
$sql="SELECT * FROM $tbl_name WHERE subunit='$subunit' and part='$part' and session='$session' and class ='$class' order by names asc";
$result=mysql_query($sql);
while($data = mysql_fetch_row($result)){ 
   echo strtoupper("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td><td>$data[4]</td><td>$data[5]</td><td>$data[6]</td><td>$data[7]</td></tr>"); 
   }
 ?>

NAMES   ID  COURSES LETTER  WEIGHT  UNIT    SUBUNIT SESSION PART    CLASS
john    2012/185301 GSP111  F   0   ARTIST  UNN 2012/2013   FIRST   100
john    2012/185301 HIS121  D   4   ARTIST  UNN 2012/2013   FIRST   100
john    2012/185301 PHL101  D   4   ARTIST  UNN 2012/2013   FIRST   100
jude    2011/176363 TRM201  C   6   ARTIST  UNE 2012/2013   FIRST   200
jude    2011/176363 ACH211  D   4   ARTIST  UNE 2012/2013   FIRST   200
mary    2011/176363 ACH231  B   12  ARTIST  UNE 2012/2013   FIRST   200

您确实不能直接在SQL中执行此操作。在SQL中,所有的列都是由查询定义的,因此它们对于每一行都是相同的。您需要两种不同类型的列

有一些黑客可以解决这个问题。一种方法是将行中的所有值连接起来,使表实际上只是一个字符串表。另一种方法是将所有其他列清空,并将总重量放在另一列中


但是,在这种情况下,最好的解决方案是在应用程序层进行工作。循环浏览结果,并在您认为合适的情况下向输出中添加新行。

实现这一点最明智的方法是使用多个查询,因为数据本身不再是表格形式(尽管使用HTML表格和
colspan
仍然可以很容易地实现您想要的效果)-您可以使用
选择名称、总和(重量)从中轻松获得相应的总数。。。按名称分组
,但需要在PHP中进行额外的逻辑处理才能将其转换为所需的显示格式。
NAMES   ID  COURSES LETTER  WEIGHT  UNIT    SUBUNIT SESSION PART    CLASS
john    2012/185301 GSP111  F   0   ARTIST  UNN 2012/2013   FIRST   100
john    2012/185301 HIS121  D   4   ARTIST  UNN 2012/2013   FIRST   100
john    2012/185301 PHL101  D   4   ARTIST  UNN 2012/2013   FIRST   100
total weight = 8                                    
jude    2011/176363 TRM201  C   6   ARTIST  UNE 2012/2013   FIRST   200
jude    2011/176363 ACH211  D   4   ARTIST  UNE 2012/2013   FIRST   200
total weight = 10                   ARTIST  UNE 2012/2013   FIRST   200
mary    2011/176363 ACH231  B   12                  
total weight = 12