php – 当条件发生时断开循环,并避免使用其预设的db值

假设学生在一个学期内修读6门课程.所有这些都有coures单位(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' .

我会非常高兴你的答案.
非常感谢.

UPDATE

我能够通过添加来解决等级piont部分

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

这将得分在0到39之间的出现设置为零,并且将默认得分<0(即AR)设置为零.
但它仍然设定了具有AR等级和得分为-1的课程的价值,以及course_unit的默认相应值.

我认为这个问题是由于course_unit是从数据库预加载的事实.有帮助吗?

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

course_id
course_code
course_title
course_unit

我对你的答案非常满意.
谢谢你的期待.

最佳答案 是否像在SELECT SUM语句中添加“AND NOT’AR’”一样简单?

或者……如果您的数据库值以AR形式出现,为什么不能在循环中使用PHP is_int()?这将允许您仍然为F分配0,并且只是跳过从数据库发送的任何非整数值.

点赞