我有两个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>";
}
}
答案 0 :(得分:1)
mysqli_fetch_array
类似于array_pop()
,因为一旦获取结果,它就不会再次获取该结果。
所以我的猜测是你的$row_wind
循环实际上正常运行,但第二次通过$row_alert
循环查找更多结果,发现它已经通过它们(在循环中)其中$row_wind = 'CT'
)。
如果你在$ row_wind循环中放入一些调试信息但在$ row_alert循环之外你应该看到差异。
要解决此问题,您必须在内部循环之前重新运行$ result_user_alerts查询,或者 - 如果内部查询不依赖于状态,则可能更好 - 事先运行mysqli_fetch_all()
来获取前面的内部循环的所有结果,然后使用foreach()
或while()
的内部循环遍历生成的数组。这样你只需要获取一次。
如果您没有mysqli_fetch_all()
avaialble,您可以手动循环:
$user_alerts = array();
while($row_alert = mysqli_fetch_array($result_user_alerts)){
$user_alerts[] = $row_alert;
}
注意事项:这种结构的方式似乎可以通过一些更好的查询来更好地执行 - 我不知道应用程序的细节,但是当你匹配来自两个SQL查询的值时在PHP循环中,数据库通常可以更快速有效地完成匹配。