数据库中查询到以下的结果:
cname linename minute
aa c1 180
aa c2 150
bb c1 10
bb c3 20
ee c4 200
如果需要把以上结果以以下的形式显示:
cname c1 c2 c3 c4
aa 180 150 0 0
bb 10 0 20 0
ee 0 0 0 200
如果使用数据库的sql 语句来组合的话,这个语句会比较复杂,假如使用数组的方式来处理以上的结果的话,那只需要几个循环就可以了。
以下是相关的实现代码,SQL 语句将省略:
<?php
$lineid=array(); //保存查询结果的linename 信息
$cname=array(); //保存查询结果的cname列的信息
$temp=array(); //把查询结果保存到临时数组中
$ma=array(); //保存处理后的查询结果.
$result=mysql_query($sql,$conn);
$num=mysql_num_rows($result);
for($i=0;$i<$num;$i++)
{
$row=mysql_fetch_object($result);
$temp[]=$row;
//循环把linename 的信息保存到数组,通过in_array函数判断linename 是否已经保存。
if(!in_array($row->linename,$lineid,true))
$lineid[]=$row->linename;
//循环把cname 列的信息保存到数组,原理同保存linename 一样
if(!in_array($row->cname,$cname,true))
$cname[]=$row->cname;
}
mysql_close($conn);
//由于每个cname的linename 列的个数不一致,所以全部初始化为相同列的数组,方便页面输出
for($i=0;$i<count($cname);$i++)
for($j=0;$j<count($lineid);$j++)
$ma[$cname[$i]][$lineid[$j]]='0';
//初始化完毕后,根据实际的情况把查询的结果赋给数组
for($i=0;$i<count($temp);$i++)
{
$ma[$temp[$i]->cname][$temp[$i]->linename]=$temp[$i]->TotalMinute; //由于查询结果采用了fetch_object 的方法,故只能采用该方式来读取相关对象的值。不能使用$temp[$i][cname]的方式来读取值。
}
// 以下的代码为页面输出
echo '<table width="90%" height="40" border="1" cellpadding="0" cellspacing="0" bordercolor="#333333">';
echo '<tr>';
echo '<th > cname</th>';
for($k=0;$k<count($lineid);$k++)
{
echo '<th width="%5">';
echo $lineid[$k];
echo '</th>';
}
echo '</tr>';
for($i=0;$i<count($cname);$i++)
{
echo '<tr>';
echo '<td>'.$cname[$i].'</td>';
for($j=0;$j<count($lineid);$j++)
echo '<td>'.$ma[$cname[$i]][$lineid[$j]].'</td>'; //注意该处和上面红色说明的区别。
echo '</tr>';
}
echo '</table>';
unset($lineid);
unset($cname);
unset($temp);
unset($ma);
?>