如图 ,给出我的代码:
<?
if($_id==1)
{ $sql = "select student.sno,sname,cname, from student,course,score where score.sno=student.sno and score.cno=course.cno order by student.sno asc";
  $query = oci_parse($conn,$sql);
  oci_execute($query);?>
<table align="center" width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
<?
echo"管理员".$_SESSION['name']."登录系统";
echo "</table>";
 while($row = oci_fetch_array($query)){$i++;
?>
<table align="center" width=500 border="0"  cellpadding="5" cellspacing="1" bgcolor="#add3ef">
  <tr bgcolor="#eff3ff">
  <td align="middle" valign="middle" width="120px" >学号</td>
  <td align="middle" valign="middle" width="120px">姓名</td>
  <? echo "<td align='middle' valign='middle'>".$row['2']."</td>";?>
  </tr>
  <tr bgColor="#ffffff">
  <td align="middle" valign="middle"><?echo $row['0'];?></td>
  <td align="middle" valign="middle"><?echo $row['1'];?></td>
  <td align="middle" valign="middle"><?echo $row['3'];?></td>
  <?php
 if($i%3==0)
 {
  echo "<HR style='border:1 dashed #987cb9' width='80%' color=#987cb9 SIZE=1>"; }
 }
}
  ?>
  </table>
每次循环的时候$i++ 当$i%3==0的时候 输出一条分割线 但是就想图中的  第一二个表格就加分割线了 不过后面的又正常了~ 请教应该如何解决~~~或者换一种显示方式,之前也在论坛里问过,没有好的方法,现在侥幸再请教一次~
就是打印出类似excel显示的方式 把出现过的课程名放在列名里,即一个人的成绩两行显示完毕~~

解决方案 »

  1.   

    如果你想每3列出现一个分隔符,那你的$i++给的太早了,需要换个位置
    <?
    if($_id==1)
    {    $sql = "select student.sno,sname,cname, from student,course,score where score.sno=student.sno and score.cno=course.cno order by student.sno asc";
         $query = oci_parse($conn,$sql);
         oci_execute($query);?>
    <table align="center" width=500 border="0" cellpadding="5" cellspacing="1" bgcolor="#add3ef">
    <?
        echo"管理员".$_SESSION['name']."登录系统";
        echo "</table>";
    $i=0;//给$i一个初始值
         while($row = oci_fetch_array($query)){ //你的$i++给的太早了
    ?>
    <table align="center" width=500 border="0"  cellpadding="5" cellspacing="1" bgcolor="#add3ef">
      <tr bgcolor="#eff3ff">
      <td align="middle" valign="middle" width="120px" >学号</td>
      <td align="middle" valign="middle" width="120px">姓名</td>
      <? echo "<td align='middle' valign='middle'>".$row['2']."</td>";?>
      </tr>
      <tr bgColor="#ffffff">
      <td align="middle" valign="middle"><?echo $row['0'];?></td>
      <td align="middle" valign="middle"><?echo $row['1'];?></td>
      <td align="middle" valign="middle"><?echo $row['3'];?></td>
      <?php
     if($i%3==0 && $i!=0)//加个判断条件,其中3代表3列加一条分隔符,想一列一条就改成1
     {
         echo "<HR style='border:1 dashed #987cb9' width='80%' color=#987cb9 SIZE=1>"; }
    $i++;//$i++放在这里才合理     }
    }
      ?>
      </table>
      

  2.   

    你说的excel显示当然可以了!不过你的分数太少了!不想写了!
      

  3.   

    不了个是吧~~~~  大哥~~麻烦您老高抬贵手~~  赐教一下excel的肿么写吧~~~  课程表的课程并不是每个人同学都有成绩的  有的有成绩 有的木有~
    类似于这种~~~
      

  4.   

    1.你的数据库表结构就不会很合理-----学号与姓名大量重复,造成表浪费
    2.你可以在现有表上写一条sql语句,就可以适应你现在的需要了
    3.sql语句样本: 
    select id,xm,max(cn) cn,max(en) en,max(num) num from
    (
    select *,
     case 
            when kc='cn'  then xf end cn,
     case 
            when kc='en'  then xf end en, 
     case 
            when kc='num'  then xf end num from kechen
    )as a group by id
    --
    -- 表的结构 `course`
    --CREATE TABLE `course` (
      `id` varchar(20) NOT NULL COMMENT '学号',
      `name` varchar(20) NOT NULL COMMENT '姓名',
      `course` varchar(20) NOT NULL COMMENT '课程',
      `fraction` varchar(20) NOT NULL COMMENT '学分'
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;--
    -- 导出表中的数据 `course`
    --INSERT INTO `course` (`id`, `name`, `course`, `fraction`) VALUES
    ('002', 'jock', 'en', '90'),
    ('001', 'jim', 'cn', '100'),
    ('001', 'jim', 'en', '100'),
    ('002', 'jock', 'en', '90'),
    ('001', 'jim', 'num', '90'),
    ('002', 'jock', 'cn', '80'),
    ('003', 'long', 'en', '100'),
    ('003', 'long', 'num', '100');-------------------
    其中course记录里面的:en代表英语,cn代表语文,num代表数学