0

私はこのシナリオで作業しています:

Students Table
IDNUMBER
NAME
LEVEL
COURSE
SECTION


Exams Table
IDNUMBER
SUBJECT_ID 
SCORE


Student_Subject Table
SUBJECT_ID
LEVEL
COURSE
SECTION

SUBJECTID_1 SUBJECTID_2 SUBJECTID_3 ... 見出しは、Student_Subject テーブルの Student テーブル LEVEL、COURSE、および SECTION に基づいて動的に生成されます。次に、Student_Subject テーブルから SUBJECT_ID を収集して、Exams テーブルからスコアを取得します。

望ましい出力

IDNUMBER NAME   SUBJECTID_1 SUBJECTID_2 SUBJECTID_3 ...
123456  JACK    6.5     8.5     9.0 

見出し、学生のリスト、およびスコアを取得できますが、それらを間違った位置に取得します。

IDNUMBER NAME   SUBJECTID_1 SUBJECTID_2 SUBJECTID_3 ...
123456  JACK    9.0     8.5     6.5 

これが私がこれまでに持っているものです。

 <?php
 include('../connect.php');

// Finds the Names

$sql="SELECT * FROM student WHERE course='$course' AND yearlevel='$year' AND section     ='$section' " ;

$result = mysql_query($sql);
echo $title.' SECCIÓN: '.'"'.$section.'"'; 
echo "<table border='1' cellpadding='1' id='resultTable'><tr><th>#</th><th>NIE</th>    <th>NOMBRE COMPLETO</th>";


// Finds subjects

$sql_subjects="SELECT subject FROM studentsubject WHERE course='$course' AND   level='$year' AND section ='$section'" ; 
$result_subjects = mysql_query($sql_subjects);
$s = '1';
while($subjects = mysql_fetch_array($result_subjects))
  {
  // Muestra los códigos de las materias.
  echo "<th style='text-align:center'>".$subjects['subject']."</th>";

  $s++;
  }


  echo "</tr>";
  $i='1';
  while($row = mysql_fetch_array($result))
  {
   //Diplays  student info
    echo "<tr>";
  echo "<td style='text-align:center'>".$i."</td>";
  echo "<td>".$row['idnumber'];
  $student = $row['idnumber'];
  echo "<td>".$row['lname'].','.$row['fname']."</td>";

  $sql_grades="SELECT subject,score FROM exam WHERE idnum='$student' AND term='1'" ; 
  $result_grades = mysql_query($sql_grades);
  $g = '1';
  while($grades = mysql_fetch_array($result_grades))
  {
  // Displays the grades
  echo "<td style='text-align:center'>".$grades['score']."</td>";

   $g++;
  }

  echo "</tr>";
  $i++;
  }
 echo "</table>";

私は何を間違っていますか?返信/サポートをよろしくお願いします。

こんにちは、みんな!この質問を投稿した後、SO は私の質問に関連するいくつかの提案された記事を提示し、いくつかを読んだ後、プロジェクトの希望の出力を得ることができました。
これが私が思いついたものです

// Finds students info
$sql="SELECT * FROM student WHERE course='$course' AND yearlevel='$year' AND section ='$section' " ;

$result = mysql_query($sql);
echo $title.' SECCIÓN: '.'"'.$section.'"'; 
echo "<table border='1' cellpadding='1' id='resultTable'><tr><th>#</th><th>NIE</th>   <th>NOMBRE COMPLETO</th>";


// Finds the  subjects

 $sql_subjects="SELECT subject FROM studentsubject WHERE course='$course' AND level='$year' AND section ='$section'" ; 
 $result_subjects = mysql_query($sql_subjects);
 $s = '1';
 $fsubject = array();
  while($subjects = mysql_fetch_array($result_subjects))
   {
   // Stores subject ID for later use.  
   $fsubject[]  = $subjects;
   // Writes Table Headings  for "subjects"
  echo "<th style='text-align:center'>".$subjects['subject']."</th>";

  $s++;
   }

 echo "</tr>";
 $i='1';
 while($row = mysql_fetch_array($result))
  {
     //Writes students info
   echo "<tr>";
   echo "<td style='text-align:center'>".$i."</td>";
   echo "<td>".$row['idnumber'];
   $student = $row['idnumber'];
   echo "<td>".$row['lname'].','.$row['fname']."</td>";


 //Finds subjects score based on subjectID

foreach($fsubject as $subject){
   //Stores subjectID 
    $test = $subject["subject"];
   // echo $test;

  // 
  // finds de exam scores based on SubjectID = $test in this case
     $sql_grades="SELECT subject,score FROM exam WHERE idnum='$student' AND term='1'    and subject='$test' "  ; 
   $result_grades = mysql_query($sql_grades);
   $g = '1';
   while($grades = mysql_fetch_array($result_grades))
   {

   // Displays scores
   echo "<td style='text-align:center'>".$grades['score']."</td>";

   $g++;
   }

   }

  echo "</tr>";
   $i++;
   }
 echo "</table>";
  ?> 

これを行うより良い方法はありますか?私は学んでいますが、これがサーバーに大きな負荷をかけるかどうかはわかりません。

JOINのご提案ありがとうございます。私はそれでもっと多くのことを学びましたが、それは私にとってはやり過ぎであり、この場合にそれを実装する方法がわかりません.

4

1 に答える 1

0

現在のコードには逆順のスコアがあるため、次を使用してみてくださいORDER BY score DESC-

$sql_grades="SELECT subject,score FROM exam WHERE idnum='$student' AND term='1' ORDER BY score DESC" ;

JOINただし、現在のコードでは件名とスコア値の間に関係がないことが問題であるため、 の使用方法を学ぶ必要があります。

于 2013-06-23T05:12:23.097 に答える