请考虑以下事项:
$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
中包含的查询会返回几行。
答案 0 :(得分:7)
你在内循环和外循环中使用$result
两次。当内循环完成时,$ result将是一个“空”结果集,因此外循环将终止。将内循环归为$result2
,事情应该没问题。
但是,由于内部循环只是根据外部循环产生的结果获取更多结果,因此您应该考虑将其重写为连接查询。运行单个“大结果”查询几乎总是比一系列“小结果”单个查询更有效。你最终会有相当大的开销来解析/编译每个内部查询。
答案 1 :(得分:1)
那里的东西非常混乱。
while($row = mysql_fetch_assoc($result) or die("FETCH ERROR: " . mysql_error()))
不需要or die()
。如果mysql_fetch_assoc
返回false
,则while
循环应该结束,您也不需要die
。
$result
变量,这可能是您询问的特定问题的原因。<div>
。混合表示逻辑和后端逻辑会非常快速地混乱。