2012-08-24 2 views
-1

부서의 학생 결과를 표시해야하는 테이블이 있습니다. 테스트 매트 번호를 작성하고 점수를 할당했습니다. 8 레벨 중 8 레벨을 400 레벨로 가정하면 8 명의 학생 중 3 명이 이월하지 않으며 다른 5 명의 학생은 이월됩니다. 이 테이블은 8 명의 학생들이 등록한 뚜렷한 코스를 해당 점수와 함께 보여 주기로되어 있습니다. 특정 코스가 등록되지 않은 경우 기본값을 표시해야합니다. enter image description hereMySQl 테이블의 기본 결과가 표시되지 않음

원하는 결과는 아래 그림과 같습니다 : enter image description here

다음

은 아래 이미지는 내가 무엇을 얻을의 결과를 보여줍니다이 결과

<?php 
require_once "scripts/connect_to_mysql.php"; 
$sq = mysql_query("SELECT DISTINCT course_code FROM tbl_result_400"); 
//$r = mysql_fetch_assoc($sq); 
$k = 1; 
echo "<table border = 1 bgcolor = 'white' class='member_tableheader'><tr>"; 
         echo "<td width = '50px' align='left' valign='top'>COURSES<BR>UNITS</td>"; 
         while ($r = mysql_fetch_assoc($sq)){ 
           $v=$r['course_code']; 
           $sq1 = mysql_query("SELECT course_unit FROM tbl_result_400 WHERE course_code = '$v'"); 
           $rr = mysql_fetch_assoc($sq1);//$v = "sup"; 
           echo "<td width = '100px' align='center' valign='top'>".$r['course_code']."<BR>"."(".$rr['course_unit'].")"."<BR>"."</td>"; 
           ++$k; 
         } 
         echo "</tr>"; 

         echo "<tr>"; 
         $sq2 = mysql_query("SELECT DISTINCT matric_no FROM tbl_registered_courses_400 ORDER BY matric_no"); 
         $rrr = mysql_fetch_assoc($sq2); 

           do{ 
             $vv = $rrr['matric_no']; $t = 1; 
             $sq4 = mysql_query("SELECT * FROM tbl_result_400 where matric_no = '$vv'"); 
             $n = mysql_num_rows($sq4); 
           $sq3 = mysql_query("SELECT score FROM tbl_result_400 where matric_no = '$vv'"); 

           echo "<td width = '100px' align='center' valign='top'>".$vv."</td>"; 
           while($rs = mysql_fetch_assoc($sq3)){ 
             if($t <= $n){ 
             if(empty($rs['score'])){ 
              $emptyScore = "&nbsp; --- &nbsp;"; 
             echo "<td width = '100px' align='center' valign='top'>".$emptyScore."</td>";  
             }else{ 
               echo "<td width = '100px' align='center' valign='top'>".$rs['score']."</td>"; 
               } 
             }; 
             if($t == $n){echo "<tr>";} 
             /*if($t > $n){ 
               echo "<td width = '100px' align='center' 
valign='top'>".$rs['score']."</td>"; 
             }*/ 
             ++$t; 
           } 
           }while($rrr = mysql_fetch_assoc($sq2)); 
           echo "</tr>"; 
         echo "</tr>"; 
echo "</table>"; 
?> 

을 달성하기위한 샘플 스크립트입니다

위의 이미지에서 matric_no 03/55ec101 학생은 코스 PHY 152에 등록하지 않았으며 따라서 디파가 없었 음을 보여줍니다 PHY 152.

06/55ec101의 학생은 PHY152를 제외한 모든 코스에서 점수를 얻지 못했을 것입니다. 대시의 기본 점수에서 코드를 수정하지 못했습니다.

친절하게 도와주세요. 다음은

는 별개의 matric 번호에 대한 샘플 SQL이다 :

-- 
    -- Table structure for table `tbl_registered_courses_400` 
    -- 

    CREATE TABLE IF NOT EXISTS `tbl_registered_courses_400` (
     `id` int(11) NOT NULL AUTO_INCREMENT, 
     `matric_no` varchar(15) NOT NULL, 
     `course_code` varchar(15) NOT NULL, 
     `course_unit` varchar(15) NOT NULL, 
     `semester_registered` varchar(6) NOT NULL, 
     `session_registered` varchar(15) NOT NULL, 
     PRIMARY KEY (`id`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ; 

    -- 
    -- Dumping data for table `tbl_registered_courses_400` 
    -- 

    INSERT INTO `tbl_registered_courses_400` (`id`, `matric_no`, `course_code`, `course_unit`, `semester_registered`, `session_registered`) VALUES 
    (1, '03/55ec101', 'CSC 402', '6', '1', '2015/2016'), 
    (2, '03/55ec101', 'CSC 499', '3', '1', '2015/2016'), 
    (3, '03/55ec101', 'CHM 401', '3', '1', '2015/2016'), 
    (4, '03/55ec101', 'CSC 470', '2', '1', '2015/2016'), 
    (5, '03/55ec101', 'CSC 414', '3', '1', '2015/2016'), 
    (6, '03/55ec101', 'CSC 411', '2', '1', '2015/2016'), 
    (7, '03/55ec101', 'CSC 403', '3', '1', '2015/2016'), 
    (8, '03/55ec101', 'BLY 401', '2', '1', '2015/2016'), 
    (9, '03/55ec101', 'PHY 152', '3', '1', '2015/2016'), 
    (10, '06/55ec101', 'CSC 402', '6', '1', '2015/2016'), 
    (11, '06/55ec101', 'CSC 499', '3', '1', '2015/2016'), 
    (12, '06/55ec101', 'CHM 401', '3', '1', '2015/2016'), 
    (13, '06/55ec101', 'CSC 470', '2', '1', '2015/2016'), 
    (14, '06/55ec101', 'CSC 414', '3', '1', '2015/2016'), 
    (15, '06/55ec101', 'CSC 411', '2', '1', '2015/2016'), 
    (16, '06/55ec101', 'CSC 403', '3', '1', '2015/2016'), 
    (17, '06/55ec101', 'BLY 401', '2', '1', '2015/2016'), 
    (18, '06/55ec101', 'PHY 152', '3', '1', '2015/2016'); 

그리고 여기에 결과 테이블에 대한 SQL의 : 같은 내가 얻을 수있는 방법에

-- 
    -- Table structure for table `tbl_result_400` 
    -- 

    CREATE TABLE IF NOT EXISTS `tbl_result_400` (
     `id` int(11) NOT NULL AUTO_INCREMENT, 
     `department_id` int(11) NOT NULL, 
     `matric_no` varchar(15) NOT NULL, 
     `session` varchar(15) NOT NULL, 
     `semester` varchar(15) NOT NULL, 
     `level` varchar(10) NOT NULL, 
     `course_code` varchar(10) NOT NULL, 
     `course_unit` varchar(10) NOT NULL, 
     `ca` varchar(4) NOT NULL, 
     `exam` varchar(4) NOT NULL, 
     `score` varchar(10) NOT NULL, 
     `grade` varchar(2) NOT NULL, 
     PRIMARY KEY (`id`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=52 ; 

    -- 
    -- Dumping data for table `tbl_result_400` 
    -- 

    INSERT INTO `tbl_result_400` (`id`, `department_id`, `matric_no`, `session`, `semester`, `level`, `course_code`, `course_unit`, `ca`, `exam`, `score`, `grade`) VALUES 
    (1, 2, '03/55EC101', '2015/2016', '1', '400', 'CSC 499', '3', '', '', '51', ''), 
    (2, 2, '06/55EJ101', '2015/2016', '1', '400', 'CSC 499', '3', '', '', '69', ''), 
    (3, 2, '06/55EJ102', '2015/2016', '1', '400', 'CSC 499', '3', '', '', '60', ''), 
    (4, 2, '06/55EJ103', '2015/2016', '1', '400', 'CSC 499', '3', '', '', '54', ''), 
    (5, 2, '06/55EJ104', '2015/2016', '1', '400', 'CSC 499', '3', '', '', '73', ''), 
    (6, 2, '03/55EC101', '2015/2016', '1', '400', 'CSC 470', '3', '', '', '72', ''), 
    (7, 2, '06/55EJ101', '2015/2016', '1', '400', 'CSC 470', '3', '', '', '68', ''), 
    (8, 2, '06/55EJ102', '2015/2016', '1', '400', 'CSC 470', '3', '', '', '87', ''), 
    (9, 2, '06/55EJ103', '2015/2016', '1', '400', 'CSC 470', '3', '', '', '53', ''), 
    (10, 2, '06/55EJ104', '2015/2016', '1', '400', 'CSC 470', '3', '', '', '45', ''), 
    (11, 2, '03/55EC101', '2015/2016', '1', '400', 'CSC 414', '2', '', '', '55', ''), 
    (12, 2, '06/55EJ101', '2015/2016', '1', '400', 'CSC 414', '2', '', '', '65', ''), 
    (13, 2, '06/55EJ102', '2015/2016', '1', '400', 'CSC 414', '2', '', '', '76', ''), 
    (14, 2, '06/55EJ103', '2015/2016', '1', '400', 'CSC 414', '2', '', '', '59', ''), 
    (15, 2, '06/55EJ104', '2015/2016', '1', '400', 'CSC 414', '2', '', '', '77', ''), 
    (16, 2, '03/55EC101', '2015/2016', '1', '400', 'CSC 411', '2', '', '', '56', ''), 
    (17, 2, '06/55EJ101', '2015/2016', '1', '400', 'CSC 411', '2', '', '', '65', ''), 
    (18, 2, '06/55EJ102', '2015/2016', '1', '400', 'CSC 411', '2', '', '', '66', ''), 
    (19, 2, '06/55EJ103', '2015/2016', '1', '400', 'CSC 411', '2', '', '', '76', ''), 
    (20, 2, '06/55EJ104', '2015/2016', '1', '400', 'CSC 411', '2', '', '', '67', ''), 
    (21, 2, '03/55EC101', '2015/2016', '1', '400', 'CSC 403', '3', '', '', '66', ''), 
    (22, 2, '06/55EJ101', '2015/2016', '1', '400', 'CSC 403', '3', '', '', '65', ''), 
    (23, 2, '06/55EJ102', '2015/2016', '1', '400', 'CSC 403', '3', '', '', '68', ''), 
    (24, 2, '06/55EJ103', '2015/2016', '1', '400', 'CSC 403', '3', '', '', '79', ''), 
    (25, 2, '06/55EJ104', '2015/2016', '1', '400', 'CSC 403', '3', '', '', '90', ''), 
    (26, 2, '03/55EC101', '2015/2016', '1', '400', 'CSC 402', '4', '', '', '65', ''), 
    (27, 2, '06/55EJ101', '2015/2016', '1', '400', 'CSC 402', '4', '', '', '72', ''), 
    (28, 2, '06/55EJ102', '2015/2016', '1', '400', 'CSC 402', '4', '', '', '48', ''), 
    (29, 2, '06/55EJ103', '2015/2016', '1', '400', 'CSC 402', '4', '', '', '80', ''), 
    (30, 2, '06/55EJ104', '2015/2016', '1', '400', 'CSC 402', '4', '', '', '69', ''), 
    (31, 2, '03/55EC101', '2015/2016', '2', '400', 'CSC 498', '6', '', '', '61', ''), 
    (32, 2, '06/55EJ101', '2015/2016', '2', '400', 'CSC 498', '6', '', '', '55', ''), 
    (33, 2, '06/55EJ102', '2015/2016', '2', '400', 'CSC 498', '6', '', '', '59', ''), 
    (34, 2, '06/55EJ103', '2015/2016', '2', '400', 'CSC 498', '6', '', '', '52', ''), 
    (35, 2, '06/55EJ104', '2015/2016', '2', '400', 'CSC 498', '6', '', '', '60', ''), 
    (36, 2, '03/55EC101', '2015/2016', '2', '400', 'CSC 419', '4', '', '', '72', ''), 
    (37, 2, '06/55EJ101', '2015/2016', '2', '400', 'CSC 419', '4', '', '', '62', ''), 
    (38, 2, '06/55EJ102', '2015/2016', '2', '400', 'CSC 419', '4', '', '', '45', ''), 
    (39, 2, '06/55EJ103', '2015/2016', '2', '400', 'CSC 419', '4', '', '', '37', ''), 
    (40, 2, '06/55EJ104', '2015/2016', '2', '400', 'CSC 419', '4', '', '', '50', ''), 
    (41, 2, '03/55EC101', '2015/2016', '2', '400', 'MAT 412', '3', '', '', '56', ''), 
    (42, 2, '06/55EJ101', '2015/2016', '2', '400', 'MAT 412', '3', '', '', '45', ''), 
    (43, 2, '06/55EJ102', '2015/2016', '2', '400', 'MAT 412', '3', '', '', '46', ''), 
    (44, 2, '06/55EJ103', '2015/2016', '2', '400', 'MAT 412', '3', '', '', '57', ''), 
    (45, 2, '06/55EJ104', '2015/2016', '2', '400', 'MAT 412', '3', '', '', '67', ''), 
    (46, 2, '03/55EC101', '2015/2016', '2', '400', 'CSC 412', '3', '', '', '67', ''), 
    (47, 2, '06/55EJ101', '2015/2016', '2', '400', 'CSC 412', '3', '', '', '55', ''), 
    (48, 2, '06/55EJ102', '2015/2016', '2', '400', 'CSC 412', '3', '', '', '60', ''), 
    (49, 2, '06/55EJ103', '2015/2016', '2', '400', 'CSC 412', '3', '', '', '69', ''), 
    (50, 2, '06/55EJ104', '2015/2016', '2', '400', 'CSC 412', '3', '', '', '59', ''), 
    (51, 0, '06/55EC101', '2015/2016', '1', '400', 'PHY 152', '3', '20', '58', '78', 'A'); 

내가 어떤 유용한 단서를 부탁드립니다 결과는 두 번째 이미지에 나타납니다. 감사합니다. .

+0

. 당신의 문제는 정확히 무엇입니까? – feeela

+0

새로운 코드를 작성하기 위해 mysql_ * 함수를 사용하지 마십시오. 더 이상 유지 관리되지 않으며 커뮤니티가 [지원 중단 프로세스] (http://goo.gl/KJveJ)를 시작했습니다. [* 빨간색 상자 *] (http://goo.gl/GPmFd)를 참조하십시오. 대신 [prepared statements] (http://goo.gl/vn8zQ)에 대해 알아야하고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용해야합니다. mysqli). 어떤 것을 결정할 수 없다면 [이 기사] (http://goo.gl/3gqF9)가 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 가이드입니다] (http://goo.gl/vFWnC). –

답변

1

당신은 다음과 같은 의미 : 당신은 당신의 실제 질문을 요약한다

<?php 

    $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', ''); 
    $stmt = $db->query("SELECT DISTINCT course_code FROM tbl_result_400"); 

    $k = 1; 
    echo "<table border = 1 bgcolor = 'white' class='member_tableheader'><tr>\n"; 
    echo "<td width = '50px' align='left' valign='top'>COURSES<BR>UNITS</td>\n"; 
    $coursesArray = array(); 
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     $v = $row['course_code']; 
     $stmt2 = $db->query("SELECT course_unit FROM tbl_result_400 WHERE course_code = '$v'"); 
     $rr = $stmt2->fetch(PDO::FETCH_ASSOC); 
     echo "<td width = '100px' align='center' valign='top'>".$row['course_code']."<BR>"."(".$rr['course_unit'].")"."<BR>"."</td>\n"; 
     $k++; 
     $coursesArray[$k] = $row['course_code']; 
    } 

    $flipArray = array_flip($coursesArray); 
    $createEmpty = array(); 
    foreach($flipArray as $num => $value){ 
     $createEmpty[$num] = 0; 
    } 

    echo "</tr><tr>"; 
    $stmta = $db->query("SELECT DISTINCT matric_no FROM tbl_registered_courses_400 ORDER BY matric_no"); 

    $z = 0; 
    $newDisplay = array(); 
    while($row = $stmta->fetch(PDO::FETCH_ASSOC)) { 
     $vv = $row['matric_no']; 
     $t = 1; 
     $stmt = $db->query("SELECT * FROM tbl_result_400 where matric_no = '$vv'"); 
     $n = $stmt->rowCount(); 
     echo "<td width = '100px' align='center' valign='top'>".$vv."a</td>\n"; 


     $newDisplay[$z] = $createEmpty; 

     while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
      foreach($coursesArray as $num => $name){ 
       if($row['course_code'] == $name){ 
        $newDisplay[$z][$name] = $row['score']; 
       } 
      } 
     } 


     foreach($newDisplay[$z] as $num => $value){ 
      if($value){ 
       echo "<td width = '100px' align='center' valign='top'>".$value."</td>\n";  
      } else { 
       echo "<td width = '100px' align='center' valign='top'> &nbsp; --- &nbsp; </td>\n"; 
      } 
     } 

     echo "</tr><tr>"; 


     $z++; 

    } 
    echo "</tr>"; 
    echo "</table>"; 

?> 
+0

Lorga, 전 PDo를 사용하지 않았습니다. 코드를 복사하여 원하는 결과를 얻을 수 있는지 확인하십시오. –

+0

PDO를 사용하기 시작하면 mysql_ *가 사용되지 않습니다. –

+0

lorga : 예, 다시 했어요. 나는 PDO 사용법을 배우러 갈 것이다. 예상대로 잘 작동합니다. 제발 당신에게서 개인 교사가 필요합니다. 감사합니다. Stackoverflow의 Pple은 매우 도움이되었습니다. –