2011-04-29 95 views
0

我有一个结果集总和为N情况和N不同的代码在一段时间。双键PHP总结到HTML表格

数据来源于此SQL

SELECT *, count(fldA) as ca 
FROM table 
WHERE ('... month/year ...') 
GROUP BY Sit, Cod 
ORDER BY count(fldA) DESC; 

确定这里就是我想要的表格:

+--------------------------------+ 
| d/l | Sit. A | Sit. B | Sit. N | 
+-----+--------+--------+--------+ 
| c91 | 10 | 05 | 10 | 
+-----+--------+--------+--------+ 
| c93 | 15 |  |  | 
+-----+--------+--------+--------+ 
| cN. | 07 | 01 |  | 
+-----+--------+--------+--------+ 
| Tot | 22 | 06 | 10 | 
+--------------------------------+ 

所以相应的阵列(结果集)以上的表应该是这样的:

SitA, C93, 15; 
SitN, c91, 10; 
SitA, c91, 10; 
SitA, CN., 07; 
SitB, c91, 05; 
SitB, cN., 01; 

请注意,一些情况(Collumns)和代码(行)WIL L VARY。有些情况下,在结果集数组中,某些col x行组合应该没有值。

显然,总数应该在之后计算。

现在的问题是......这种结果集=>表创建的最好方法是什么?最好只使用一个SQL请求。

THX

回答

0

所以,既然没有任何帮助来... ...我做这个

<?php 

...

$sql=""; 

function timeFilter(){ 
    $q=""; 
    if ($_GET['mes']!='' || $_GET['ano']!=''){ $q.=" WHERE";} 
    if ($_GET['mes']!=''){ $q.=" MONTH(ouventrada)=$_GET[mes]";} 
    if ($_GET['mes']!='' && $_GET['ano']!=''){ $q.=" AND";} 
    if ($_GET['ano']!=''){$q.=" YEAR(ouventrada)=$_GET[ano]";} 
    return $q; 
} 

// we gonna use two buffers for collumns and rows... 

function fillBuff (&$buff, $fld){ 
    $buff = array(); 
    $sql = "SELECT $fld FROM ouv" . timeFilter() . " GROUP BY $fld"; 
    $res = mysql_query($sql); 
    while ($row=mysql_fetch_assoc($res)){ 
     $buff[]=$row[$fld]; 
    } 
} 

$quad .= "<div id='stats'>"; 

// Fill buffers 
$buffatc = array(); 
$bufftipo = array(); 
fillBuff ($buffatc, 'ouvatc'); 
fillBuff ($bufftipo, 'ouvtipo'); 

// Table headers 
$tbl = "<table class='resumo'>"; 
$tbl.= "<thead><tr><th></th>"; 
foreach ($bufftipo as $l){ 
    $tbl.="<th>$l</th>"; 
} 
$tbl.="</tr></thead>"; 

// Table foot (Totals) 
$tbl.="<tfoot><tr style='background-color: #f0f0f0'><td style='font-size: 50%;'>Total</td>"; 
foreach($bufftipo as $l){ 
    $sql="SELECT count(*) AS ca FROM ouv" . timeFilter(); 
    $sql.= (strpos($sql,"WHERE"))?" AND":" WHERE"; 
    $sql.=" ouvtipo='$l'"; 
    $rowt = mysql_fetch_assoc(mysql_query($sql)); 
    $tbl.="<td style='font-weight: bold'>$rowt[ca]</td>"; 
} 
$tbl.="</tfoot>"; 

// Table Body 
$tbl.="<tbody>"; 
foreach ($buffatc as $r){ //data 
    $tbl.="<tr>"; 
    $tbl.="<td style='font-size: 50%;'>$r</td>"; 
    foreach($bufftipo as $l){ 
     $sql="SELECT count(*) as ca FROM ouv " . timeFilter(); 
     $sql.= (strpos($sql,"WHERE"))?" AND":" WHERE"; 
     $sql.=" ouvatc='$r' AND ouvtipo='$l'"; 
     $rowt = mysql_fetch_assoc(mysql_query($sql)); 
     $tbl.="<td style='font-weight: bold'>$rowt[ca]</td>"; 
    } 
    $tbl.="</tr>"; 
} 
$tbl.="</tbody>"; 
$tbl .="</table>"; 

$quad.= $tbl; 

$quad.= "</div>"; 

我们throught为collumns两个 '缓冲区' 互动以及设置sql的行以一次计算每个单元格...

gl,thx

Paulo Bueno。