【问题标题】:Can I have 2 mysql_fetch_array() inside a while loop? [PHP]我可以在 while 循环中有 2 个 mysql_fetch_array() 吗? [PHP]
【发布时间】:2016-04-08 00:51:25
【问题描述】:

我正在尝试显示来自 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>";
}

提前致谢。

编辑: 感谢您的所有答复,但是,我无法实施建议的内容。我的工作包括创建数组,对于每个元素(data[$i] 和 row[$i]),我只是将它们添加到 2 个单独的数组中。我仍然使用了两个单独的 while 循环。可能是低效/糟糕的代码,但我让它工作了,哈。

【问题讨论】:

  • 嗯,我不知道,对你有用吗?
  • 可以,但是如果每个查询中返回的行数不同,那么当行数较少的查询中没有更多结果时,循环将停止。
  • 强烈建议您从 mysql_ 函数切换到 MySQLi 或 PDO 等驱动程序,因为 mysql_ 函数自 PHP 5.5.0 起已弃用,并在 PHP 7.0.0 中完全删除。
  • 似乎您可以使用|| 而不是&amp;&amp; 来防止@AbraCadaver 所指的内容。然后,您必须在打印之前检查是否设置了 $myData$row
  • 用我的理想代码,它只显示 $row[] 值,完全错过了条件的前半部分(即 $myData[])

标签: php mysql while-loop


【解决方案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>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-06-19
    • 2012-08-19
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多