【问题标题】:How to run a sql query inside a while of another sql query?如何在另一个 sql 查询的一段时间内运行 sql 查询?
【发布时间】:2016-05-03 20:11:15
【问题描述】:

您好,我的代码如下:-

$sql="SELECT student_id,DA1,DA2,DA3,DA4,DA5,DA6,HA1,HA2,HA3,HA4,HA5,HA6 from table";
$results = $result->query($sql);
while($row = $results->fetch_assoc())
{
   $id = $row['student_id'];
   $marks1 = $row['DA1'] + $row['HA1']/2 ;
   $marks2 = $row['DA2'] + $row['HA2']/2 ;
   $marks3 = $row['DA3'] + $row['HA3']/2 ;
   $marks4 = $row['DA4'] + $row['HA4']/2 ;
   $marks5 = $row['DA5'] + $row['HA5']/2 ;
   $marks6 = $row['DA6'] + $row['HA6']/2 ;

   $i = 1;
   while($i <= 6)
   {
      $sql = "SELECT `grade`,`point` FROM `grades` where  ${'marks' . $i} BETWEEN min and max";
      $results = $result->query($sql);
      $row = $results->fetch_assoc();
      ${'grade' . $i} = $row['grade'];
      ${'point' . $i} = $row['point'];
      $i++;
    }  

    $totalcredit = 20;
    $sgpa= ($point1*$c1 + $point2*$c2 + $point3*$c3 + $point4*$c4 + $point5*$c5 + $point6*$c6) / $totalcredit ;

    $sql = "UPDATE table SET `G1` = '$grade1', `G2` = '$grade2' ,`G3` ='$grade3',`G4` = '$grade4',`G5` = '$grade5',`G6` = '$grade6', `SGPA` = '$sgpa' WHERE student_id = '$id'";
    $result->query($sql);
 }

在这段代码中,我试图计算一个班级的成绩和 sgpa。在第一个查询中,选择所有详细信息并计算六个科目的总分。在第二个查询中,我将分数和分数存储在变量中,然后计算 sgpa。然后执行更新查询以将详细信息存储在数据库中。

该表由 100 行组成。该代码适用于第一行,但不适用于其他行并返回空值。我正在递归地尝试使用所有学生的数据计算和更新表格。如果有人可以帮助运行所有行的代码,我将不胜感激。

【问题讨论】:

  • 在 sql 循环中将 $results 更改为 $results2。看起来你正在为另一个覆盖一个。
  • 你内心的 WHILE 正在覆盖你的变量 $results 的内容
  • 你的价值观$c1 - $c6 来自哪里?

标签: php mysql sql database mysqli


【解决方案1】:

像这样改变内部的while循环:-

$i = 1;
while($i <= 6)
{
  $sql = "SELECT `grade`,`point` FROM `grades` where  ${'marks' . $i} BETWEEN min and max";
  $results2 = $result->query($sql);
  $row = $results2->fetch_assoc();
  ${'grade' . $i} = $row['grade'];
  ${'point' . $i} = $row['point'];
  $i++;
}

在您的代码中 $results 被覆盖,因此在内部循环中将其更改为 $results2 将解决您的问题。

【讨论】:

  • @cmorrissey $result 不需要更改,因为它是数据库连接对象。
  • 非常感谢@Kushal Srivastava 更改 $results 解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多