Выход из цикла при возникновении условия и избегание использования его предустановленного значения в БД - PullRequest
4 голосов
/ 18 марта 2012

Предполагается, что студент проходит 6 курсов в семестре.У всех этих коусов есть курьерские единицы (int), и в зависимости от оценки в каждом курсе есть баллы ..

 so a score >=70 will have a point of 5

 <70 and >=60 will have a ponit of 4

и так далее.Для каждой единицы курса и точки умножаются вместе, вниз по столбцу для каждого столбца.Теперь, когда оценка по курсу не найдена, оценка составляет «AR».Теперь я хочу, чтобы циклы пропускали AR, т.е. не добавляли единицу курса с оценкой «AR».Но когда я выполняю свои запросы над единицами, они все равно добавляются к общим единицам курса.

Query4 используется для генерации некоторых строк course_unit и Score

  $query4 = mysql_query("SELECT  c.course_unit, 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());

Query3 используется для суммирования course_units

 $query3 = mysql_query("SELECT  SUM(c.
 course_unit) AS 'TOTAL'
 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());

Оценки в отношении оценки

 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';
            }elseif($row8['score'] >= 0) &&
            ($row8['score'] < 40){
               $grade = 'F';
            }else{
               $grade = 'AR';
            }   
     }   

Расчет балла оценки

      $grade_point = 0;
      while ($row4 = mysql_fetch_assoc($query4)) {
         if ($row4['score'] >= 70) {
            $score = 5;
          }
          elseif ($row4['score'] >= 60) {
             $score = 4;
          }elseif ($row4['score'] >= 50) {
             $score = 3;
          }elseif ($row4['score'] >= 45) {
             $score = 2;
          }elseif($row4['score'] >= 40) {
             $score = 1;
          }elseif($row4['score'] >= 0 AND                       $row4['score'] < 40) {
             $score = 0;
          }else{
             $score = 0;
          } 

          $grade_point += $score * $row4['course_unit'];

      }

Я добавил

  if ( $grade == 'AR' )
  {
       continue;
  }

Но вычисления все те же,Он добавляет значение course_unit любого курса, имеющего

$grade == 'AR' .

. Я буду очень рад вашим ответам.Большое спасибо.

ОБНОВЛЕНИЕ

Мне удалось решить часть оценки, добавив

     elseif($row4['score'] >= 0 AND                       $row4['score'] < 40) {
             $score = 0;
          }else{
             $score = 0;
          }

Это устанавливает оба случаяоценка от 0 до 39 до нуля, а также оценка по умолчанию от <0 (т.е. AR) до нуля.Но он по-прежнему устанавливает значение курсов, имеющих оценку AR и балл -1, к соответствующим значениям по умолчанию для course_unit. </p>

Я думаю, что эта проблема возникает из-за того, что course_unitпредварительно загружен из базы данных.Любая помощь?

Courses Table Stucture
=================

course_id
course_code
course_title
course_unit

Я буду очень рад вашим ответам.Спасибо в ожидании.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Это так же просто, как добавить «И НЕ« AR »» в свой оператор SELECT SUM?

Или ... если ваши значения БД поступают как AR, почему вы не можете использовать PHP is_int() в вашем цикле?Это позволит вам по-прежнему назначать 0 для F и просто пропустить любые нецелочисленные значения, отправляемые из вашей БД.

1 голос
/ 19 марта 2012

Я сделаю тебе удар, хотя трудно подобрать то, что ты пытаешься достичь из-за некоторых противоречивых утверждений, таких как;«не добавляя единицу курса курса, имеющего оценку« AR »», и «Но он по-прежнему устанавливает значение курсов, имеющих оценку AR и оценку -1 к значению по умолчанию, соответствующемузначения course_unit . "

Мне кажется, что query3 возвращает сумму всех course_units безотносительно к оценкам или баллам, поэтому вместо сложения попробуйте вычесть что-то вроде:

if ( $grade == 'AR' ) {
    // Remove current course_unit from 'Total' derived in query
} 

// Total remains untouched b/c the class was successfully completed

Надеюсь, это имеет смысл, хотя заявление, которое вы сделали в своем последнем комментарии;«Но когда я выполняю свой запрос над единицами, все равно добавляю к общему количеству единиц курса», это сбивает с толку, потому что query3 слепо вычисляет сумму с логикой 0.

...