请考虑以下事项:
$query = "SELECT legIDs FROM trip";
$result = mysql_query($query) or die("SELECT TRIPS ERROR: " . mysql_error());
while($row = mysql_fetch_assoc($result) or die("fetch error " . mysql_error())) {
echo "<div style="border: 1px solid blue;float:left;">Trip: <div style="float:right;">";
$legID = explode(",", $row['legIDs']);
foreach($legID as $leg) {
$query = "SELECT dep, arr FROM leg WHERE `Key` = " . $leg;
$result = mysql_query($query) or die("SELECT LEGS ERROR: " . mysql_error());
$row2 = mysql_fetch_assoc($result) or die("FILL ARRAY ERROR: " . mysql_error());
echo $row2['dep'] . " - " . $row2['arr'] . "<br />";
}
echo "</div></div>";
}
由于某些原因,即使WHILE()
循环返回了多个值,也只返回一个结果。FOREACH()
循环处理返回的一行。我是不是做错了什么,只把这个回车放在一排?直接在服务器上执行$result
中包含的查询会返回几行。
在内部和外部循环中使用$result
两次。。当内部循环完成时,$result将是一个"空"结果集,因此外部循环将终止。C将内部循环更改为$result2
,一切都会好起来。
但是,由于内部循环只是根据外部循环产生的结果获取更多结果,因此应该考虑将其重写为联接查询。运行单个"大结果"查询几乎总是比运行一长串"小结果"单个查询更高效。解析/编译每个内部查询的开销都相当大。
这是非常混乱的东西。
-
while($row = mysql_fetch_assoc($result) or die("FETCH ERROR: " . mysql_error()))
不需要
or die()
。如果mysql_fetch_assoc
返回false
,则while
循环应该结束,您也不需要die
。 - 基于其他SQL查询的循环中的SQL查询通常可以通过原始查询中更好的JOIN或通过生成更智能的辅助查询来更好地处理
- 您在内部循环中覆盖了外部循环的
$result
变量,这可能是您所询问的特定问题的原因 - 您应该将数据获取与输出分开。首先进行查询以获取所有必要的数据,然后将其输出到
<div>
s中。混合表示逻辑和后端逻辑很快就会变得非常混乱