嵌套While循环仅在循环内部正确运行


Nested While loop only runs inside loop correctly

我有两个while循环,用来运行一些MySQL数据。

第一个while循环运行一堆报告,并检查表中存储的"state"(如美国)。

在这个循环中,我用while循环检查第二个表中的"state",如果状态匹配,我会将一些信息推送到数组中。为了简单起见,我去掉了其他代码。

基本上,我从第一个while循环开始,并将所有信息记录到控制台,它成功地循环了表中的所有条目。

然后,我将嵌套的while循环放在那里,当我试图提醒或将其记录到控制台时,它只循环通过父循环中第一个条目的实例。

我的意思是,在$row_wind循环中,第一个条目是CT(康涅狄格州)。当我注销父循环时,它会记录该表中的所有内容(CT是第一个)。当我使用下面的代码时,它只记录CT,然后记录子循环中的所有条目,但之后不计数器父循环。循环时我不能筑巢吗?

while($row_wind = mysqli_fetch_array($sql_wind_result)){
    while($row_alert = mysqli_fetch_array($result_user_alerts)){
        echo "<script>alert('".$row_wind['state']." ".$row_alert['state']."');</script>";
    }
}

mysqli_fetch_arrayarray_pop()的相似之处在于,一旦它获取结果,就不会再获取该结果。

所以我的猜测是,你的$row_wind循环实际上运行得很好,但第二次通过$row_alert循环寻找更多结果时,发现它已经运行了(在$row_wind = 'CT'的循环中)。

如果您将一些调试信息放在$row_wind循环中,但放在$row_alert循环之外,您应该会看到差异。

要解决此问题,您必须在内部循环之前重新运行$result_user_alerts查询,或者——如果内部查询不依赖于状态,可能会更好——预先运行mysqli_fetch_all()以获取内部循环的所有结果,然后使用foreach()while()的内部循环遍历结果数组。这样你只需要取一次。

如果您没有可用的mysqli_fetch_all(),您可以手动循环通过:

$user_alerts = array();
while($row_alert = mysqli_fetch_array($result_user_alerts)){
    $user_alerts[] = $row_alert;
}

值得注意的是:然而,它的结构方式似乎可以用一些更好的查询更好地执行——我不知道你的应用程序的细节,但当你在PHP循环中匹配两个SQL查询的值时,数据库通常可以更快、更高效地进行匹配。