把查询得到的结果搞到数组里再处理显示...

解决方案 »

  1.   

    关键问题不在于sql而是如何显示。
      

  2.   

    /*** 你的查询结果是这样的一个数组 ***/
    $rec = array (
      array (
        'userid' => '9',
        'studyid' => '20042544',
        'truename' => '张三',
        'term' => '学期一',
        'course_name' => '课程一',
        'total' => '65',
        'classid' => '5',
      ),
      array (
        'userid' => '10',
        'studyid' => '200521542',
        'truename' => '李四',
        'term' => '学期一',
        'course_name' => '课程二',
        'total' => '79',
        'classid' => '5',
      ),
      array (
        'userid' => '10',
        'studyid' => '200521542',
        'truename' => '李四',
        'term' => '学期一',
        'course_name' => '课程三',
        'total' => '69',
        'classid' => '5',
      ),
      array (
        'userid' => '9',
        'studyid' => '20042544',
        'truename' => '张三',
        'term' => '学期一',
        'course_name' => '课程四',
        'total' => '71',
        'classid' => '5',
      ),
      array (
        'userid' => '9',
        'studyid' => '20042544',
        'truename' => '张三',
        'term' => '学期二',
        'course_name' => '课程一',
        'total' => '80',
        'classid' => '5',
      ),
      array (
        'userid' => '10',
        'studyid' => '200521542',
        'truename' => '李四',
        'term' => '学期二',
        'course_name' => '课程二',
        'total' => '88',
        'classid' => '5',
      ),
    );/*** 达到你的显示样式大致需要这样一个数据结构,当然不是最佳的 ***/
    $fmt = array(
     '学号' => '姓名',
     '成绩' => array(
      '学期一' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0),
      '学期二' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0),
      '学期三' => array('课程一' => 0, '课程二' => 0, '课程三' => 0, '课程四' => 0, '课程五' => 0, '课程六' => 0),
     )
    );/*** 为了将查询结果转换成显示需要的结构,要做以下操作。我是用模拟数据数组做的,实际可在读取查询时完成 ***/
    foreach($rec as $v) {
      $out[$v['studyid']]['姓名'] = $v['truename'];
      $out[$v['studyid']]['成绩'][$v['term']][$v['course_name']] = $v['total'];
    }/*** 输出的写法,由于可能有栏目空缺、也可能待输出数组中栏目的的次序与显示要求不同。因此用基本结构数组作为控制模板 ***/
    foreach($out as $k=>$v) {
      echo str_pad($k,10).'|'.str_pad($v['姓名'], 6, ' ', STR_PAD_BOTH);
      /** 用模板控制显示的次序 **/
      foreach($fmt['成绩'] as $i=>$t) {
        foreach($t as $j=>$m) {
          if(isset($v['成绩'][$i][$j]))
            $n = $v['成绩'][$i][$j];
          else
            $n = '';
          echo '|'.str_pad($n, 4, " ", STR_PAD_BOTH);
        }
      }
      echo "\n";
    }
    示例输出
    20042544  | 张三 | 65 |    |    |    |    |    | 80 |    |    |    |    |    |    |    |    |    |    |    
    200521542 | 李四 |    | 79 | 69 |    |    |    |    | 88 |    |    |    |    |    |    |    |    |    |