2012-03-15 2 views
0

私のコードのこの部分は、学生の学期の結果(コースの得点)を要求するたびに採点を採点するために使用されます。しかし、すべての得点に特定の等級しか与えられない場合、ほとんどの場合、学生データベースにアップロードされた最後の結果がすべての得点に授与されます。グレードに期間を追加した場合、つまり学生の採点システムをループ内で実装する方法

$grade .= 'A'; 
    $grade .= 'B'; 
    $grade .= 'C'; 
    $grade .= 'D'; 
    $grade .= 'E'; 

すべてのグレードを各列で繰り返しました。だから、特定の学生が学期中に6コースを取り、すべての6つのグレードが6コースに各行に繰り返した

3 A's , 2 B's , 1 C 

の合計を持っていたと仮定します。私は次の列が

Course_code 
    Course_title 
    Course_unit 
    Score 
    Grade 

のみ最初の4つは、データベース、最後の(グレード)に既にある値から、私が作成していますされている生成していたHTMLテーブルの上に

いつでも私学生の学期の結果を要求したい。あなたの忍耐と助けを

while ($row8 = mysql_fetch_assoc    ($query8)) { 
      if ($row8['score'] >= 70) { 
       $grade = 'A'; 
      } 
      elseif ($row8['score'] >= 60) { 
      $grade = 'B'; 
      }elseif ($row8['score'] >= 50) { 
      $grade = 'C'; 
      }elseif ($row8['score'] >= 45) { 
      $grade = 'D'; 
      }elseif($row8['score'] >= 40) { 
      $grade = 'E'; 
      }else{ 
      $grade = 'F'; 
      } 
      } 

Query8

$query8 = mysql_query("SELECT m.    score 
    FROM maintable AS m 
    INNER JOIN students AS s ON 
    m.matric_no = s.matric_no 
    INNER JOIN courses AS c ON 
         m.course_code = c.course_code 
    WHERE m.matric_no = '".$matric_no."' 
    AND m.level = '".$level."'") 
    or die (mysql_error()); 

テーブル構造

MAINTABLE: 
score_id 
matric_no 
session 
semester_name 
course_code 
level   
score 
grade 

COURSES: 
course_id 
course_code 
course_title 
course_unit 

STUDENT 
matric_no 
first_name 
last_name 
other_name 
level 

感謝。私はそれを高く評価します。

ありがとうございました。

+0

あなたの質問は何ですか? – liquorvicar

+0

私はdbから学生の得点を要求する度にスコアに動的に格付けを実装したいと思っています。 ありがとう –

+0

まだ明らかではありません。私はバックグラウンドを理解していませんでした。テーブル(記録付き)がどのように見えるかの例を教えてください。 –

答えて

0

編集によってquery8注文のクエリ結果をフェッチします。

ペーストビンによれば、あなたはリンクしています(行番号を付けると、ペーストビンに表示される行になります)、私は全体のコードに入りませんでしたが、興味のある部分あなたの問題は、すべての生徒の成績を計算し、常に同じ変数に保存することです。その変数は、後でループの外側で印刷しようとすると、ループで渡された最後の生徒の成績のみが含まれます。

$query7$query8は、同じフィールドを取得しない限り、同じです。 DBの処理に2倍の仕事があるので、$query7(スコアも含む)を使用し、$query8(行122〜130)を削除するのが最善の方法です。

グレード計算(行141〜155)は$query8にループされていますので、1つのスコアについて1つのグレードを計算するためには必要ありません。だから、ループを削除して、内部のものを保持してください。

言っループ(ライン155から142を)の内側に、私は私の最初の記事で行ったように、関数の中でそれを置く:ライン188から170に

function makeGrade($score) { //just a rewrite of your own code, exactly the same purpose 
    if($score>=70) 
     return 'A'; 
    if($score>=60) 
     return 'B'; 
    if($score>=50) 
     return 'C'; 
    if($score>=45) 
     return 'D'; 
    if($score>=40) 
     return 'E'; 
    return 'F'; 
} 

を、あなたループ$query7上へデータを印刷し、182行目に$gradeを印刷します。代わりに$gradeを印刷する、ちょうどあなたが$query7に検索フィールド「スコア」との関数を呼び出す:

echo makeGrade($row['Score']); 

は、今では、各学生と各コースの右のグレードを与える必要があります。ちなみに、ここではDBにグレードフィールドは必要ないので、削除することができます。

もう1つの方法は、DB内にグレードを入れることです(しかし、とにかく$query8は必要ありません)。まず、同じmakeGrade()関数を使用してコードがMAINTABLE(私が想定している他のファイル)にコードを挿入するときに設定する必要があります(この場合、両方のスクリプトがインクルードファイル)。第二に、既存の行のために、あなたはこのように、UPDATEのシリーズを実行する必要があるだろう:

UPDATE MAINTABLE SET grade='A' WHERE score>=70; 
UPDATE MAINTABLE SET grade='B' WHERE score>=60 AND score<70; 
UPDATE MAINTABLE SET grade='C' WHERE score>=50 AND score<60; 
UPDATE MAINTABLE SET grade='D' WHERE score>=45 AND score<50; 
UPDATE MAINTABLE SET grade='E' WHERE score>=40 AND score<45; 
UPDATE MAINTABLE SET grade='F' WHERE score<40; 

次に、あなただけの$query7さんSELECT一部でgradeを追加する必要があり、ライン上で182

$row['grade']を使用

あなたの選択:

+0

助けてくれてありがとう。ここでは、私が作っているhtmlテーブルの例です。右端の列は成績のためのもので、すべての成績は「C」ですが、合計は「B」、他のものは「F」であることがわかります。 それは私の問題です。 http://m.box.com/view/f_1809576751 ありがとうございます。それは有り難いです。 –

+0

どの1つの学期でも、学生はいくつかのコースを受講しますが、コースのスコアのみを取得することができます。したがって、1学期に6つのコースを受講する場合、そのコースのスコアに応じて6つのスコア、したがって6つのグレードが得られることが期待されます。 –

+0

私は結果をCSVファイルでアップロードしています。 Matric_noとscore .. –

0

良い

while ($row8 = mysql_fetch_assoc    ($query8)) { 

echo "<td>$row['course_id']</td>"; 
echo "<td>$row['course_code']</td>"; 
echo "<td>$row['course_title']</td>"; 
echo "<td>$row['score']</td>"; 
echo "<td>"; 
      if ($row8['score'] >= 70) { 
       $grade = 'A'; 
      } 
      elseif ($row8['score'] >= 60) { 
      $grade = 'B'; 
      }elseif ($row8['score'] >= 50) { 
      $grade = 'C'; 
      }elseif ($row8['score'] >= 45) { 
      $grade = 'D'; 
      }elseif($row8['score'] >= 40) { 
      $grade = 'E'; 
      }else{ 
      $grade = 'F'; 
      } 

echo $grade ."</td></tr>"; 

} 
0

ご質問はそれほど明確ではないが、このようにしてみてください。ここに提案があります。

はmatric_no

$lastid='-1'; 
    $newgrade=""; 
    while ($row8 = mysql_fetch_assoc($query8)) { 
     if ($row8['score'] >= 70) { 
      $grade = 'A'; 
     } 
     elseif ($row8['score'] >= 60) { 
     $grade = 'B'; 
     }elseif ($row8['score'] >= 50) { 
     $grade = 'C'; 
     }elseif ($row8['score'] >= 45) { 
     $grade = 'D'; 
     }elseif($row8['score'] >= 40) { 
     $grade = 'E'; 
     }else{ 
     $grade = 'F'; 
     } 
     } 
     $mno=$row8['matric_no']; 
     if(($lastid!=$mno && $lastid!='-1')) { 
     echo "<tr><td>all db details</td><td>$newgrade</td></tr>"; //$newgrade has appended grades of student(identified by matric_no) 
     $newgrade=""; 
     } 
     $newgrade.=$grade; 
     $lastid=$mno; 
    } 
+0

助けてくれてありがとう。ここでは、私が作っているhtmlテーブルの例です。右端の列は成績のためのもので、すべての成績は「C」ですが、合計は「B」、他のものは「F」であることがわかります。 それは私の問題です。 http://m.box.com/view/f_1809576751 ありがとうございます。それは有り難いです。 –

関連する問題