我可以在while循环中有2个mysql_fetch_array()吗? [PHP]

时间:2016-04-06 15:20:20

标签: php mysql while-loop

我正在尝试显示来自2个不同SQL表(规范化数据库)的数据,并在HTML表格中并排显示数据。

我可以显示表A和表B中的数据,但是,我通过两个独立的while循环实现了这一点。我想将这些while循环合并为一个。

问题:我可以在while循环中有2个mysql_fetch_array()条件吗?

显示表A中的数据:

$result = mysql_query("SELECT * from ReportValues WHERE
ReportValues.ReportID = '$Report_Values'");
while ($myData = mysql_fetch_array($result, MYSQL_NUM))
{
echo "<tr>";
echo "<td>" . $myData[2] . "</td>";
echo "</tr>";
}

显示表B中的数据:

$result = mysql_query("SELECT * FROM Element WHERE Element.ElementsID
= (SELECT ElementsID FROM Template WHERE Template.TID = '$Temp')");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
echo "<td>" . $row[2] . "</td>";
echo "</tr>";
}

理想情况下,我正在努力实现这样的目标:

$result = mysql_query("SELECT * from ReportValues 
                       WHERE ReportValues.ReportID = '$Report_Values'");

$result2 = mysql_query("SELECT * FROM Element 
                        WHERE Element.ElementsID = 
                          (SELECT ElementsID FROM Template 
                           WHERE Template.TID = '$Temp'
                          )"
                       );

while ($myData = mysql_fetch_array($result, MYSQL_NUM) && 
       $row = mysql_fetch_array($result2, MYSQL_NUM))
{
    echo "<tr>";
    echo "<td>" . $myData[2] . "</td>";
    echo "<td>" . $row[2] . "</td>";
    echo "</tr>";
}

提前致谢。

编辑: 感谢您的所有回复,但是,我无法实现所建议的内容。我的工作包括创建数组,并为每个元素(数据[$ i]和行[$ i])我刚刚将它们添加到2个独立的数组中。我仍然使用两个单独的while循环。可能是低效/差的代码,但我让它工作,哈。

1 个答案:

答案 0 :(得分:1)

您可以,但是如果每个查询中返回的行数不同,那么当行数较少的行中没有更多结果时,循环将停止:

while ($myData = mysql_fetch_array($result, MYSQL_NUM) &&
       $row    = mysql_fetch_array($result2, MYSQL_NUM))
{
    echo "<tr>";
    echo "<td>" . $myData[2] . "</td>";
    echo "<td>" . $row[2] . "</td>";
    echo "</tr>";
}

要为大多数行保留循环,可以使用OR,但需要检查变量是否已设置:

while ($myData = mysql_fetch_array($result, MYSQL_NUM) ||
       $row    = mysql_fetch_array($result2, MYSQL_NUM))
{
    echo "<tr>";
    echo "<td>" . isset($myData[2]) ? $myData[2] : '' . "</td>";
    echo "<td>" . isset($row[2]) ? $myData[2] : ''  . "</td>";
    echo "</tr>";
}