PHP 实现查询结果动态组合输出

      数据库中查询到以下的结果:

     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);

 

?>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值